我想做以下事情:
models.py
class MyModel(TimeStampedModel, models.Model):
name = models.CharField(max_length=100)
owner = models.ForeignKey(settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)
serializers.py
class MyModelSerializerCreate(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = (
'name',
)
Run Code Online (Sandbox Code Playgroud)
我想添加当前用户的所有者request.user
.目前我在我的视图中通过向用户提升request.data直接添加它,然后将更新的数据传递给我的序列化程序.
data = request.data
# Add owner to data
data["owner"] = request.user.pk
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
Run Code Online (Sandbox Code Playgroud)
我想直接在我的序列化程序中执行此操作,但无法找到正确执行此操作的方法,因为它看起来像是对我进行数据验证.这是一个好主意吗 ?我应该将这个逻辑保留在我的视图中还是将其移动到我的序列化程序中?
|-- my_module
| |-- __init__.py
| |-- function.py
`-- test.py
Run Code Online (Sandbox Code Playgroud)
在function.py中:
import other_function
def function():
doStuff()
other_function()
return
Run Code Online (Sandbox Code Playgroud)
在__init__.py中
from .function import function
Run Code Online (Sandbox Code Playgroud)
在我的test.py中
from django.test import TestCase
from mock import patch
from my_module import function
class Test(TestCase):
@patch('my_module.function.other_function')
def function_test(self, mock_other_function):
function()
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了AttributeError:
<@任务:项目:0x7fed6b4fc198的my_module.function.function>没有属性'other_function'
这意味着我正在尝试修补功能“功能”而不是模块“功能”。我不知道该如何修补我要修补的模块。
我也想避免重命名我的模块或函数。
有任何想法吗?
[编辑]您可以在https://github.com/vthorey/example_mock run上找到一个示例
python manage.py test
Run Code Online (Sandbox Code Playgroud) 假设我的 models.py 中有以下内容:
class Book:
pass
class Part:
book = models.ForeignKey(Book)
class Chapter:
part = models.ForeignKey(Part)
number = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想要做
book = Book.objects.get(id=someID)
chapters = Book.chapters.get(number=4)
Run Code Online (Sandbox Code Playgroud)
什么是干净的方法?我在书本课上想到了经理,但它似乎不适用于这种情况。
当然,我可以在课堂书籍上实现 get_chapters 方法,但我想避免这种情况。
有任何想法吗 ?
我的问题如下:
我有一个 Django 应用程序,可以在上面上传文件。上传文件时,将启动 celery 任务来根据其版本处理特定队列上的文件,如下所示:
import my_library
@app.task()
def process_file(file):
result = my_library.process(file)
model = MyModel(result=result)
model.save()
return
def file_upload(request):
file = request.FILE['file']
version = parse_version(file)
process_file.run_async(file, queue=version)
Run Code Online (Sandbox Code Playgroud)
所以我的库的每个版本都有一个队列。我的想法是创建多个守护进程,每个守护进程对应我的库的每个队列/版本,使用虚拟环境来使用正确版本的 my_library。
但我不知道如何正确地做到这一点。
不同版本的 my_library 不能共存,因为它们包含依赖于具有相同版本号的自定义 C 库的 Cython 函数。