我有Folder
型号。 Folder
已将foreignkey
User
folders
称为Folder
。
在django rest框架中,我想创建新的ModelViewSet
对象。如何指定“在self.request.user.folders创建对象”?在当前(开箱即用的香草Folder
)实现我收到错误:
folder.folder.user_id可能不是NULL
这表示我们尝试创建user
对象时未指定create
。
是否有内置方法或是否需要覆盖user
方法并将user_id
作为参数传递给序列化程序?
请注意,由于安全问题,我们不希望在request.DATA
中传递class FolderModel(Model):
user = ForeignKey(User, related_name='folders')
title = CharField(max_length=100)
。
models.py:
class FolderView(viewsets.ModelViewSet):
serializer_class = serializers.FoldereSerializer
model = FolderModel
def get_queryset(self):
return self.request.user.folders.all()
views.py:
{{1}}
答案 0 :(得分:1)
由于功能已更改,原始答案从DRF 3.0开始不再起作用。相关文档为here。
从文档中
pre_save和post_save钩子不再存在,而是由perform_create(自我,序列化器)和perform_update(自我,序列化器)代替。
这些方法应通过调用serializer.save()保存对象实例,并根据需要添加任何其他参数。他们还可以执行任何自定义的保存前或保存后行为。
例如:
def perform_create(self, serializer):
# Include the owner attribute directly, rather than from request data.
instance = serializer.save(owner=self.request.user)
# Perform a custom post-save action.
send_email(instance.to_email, instance.message)
答案 1 :(得分:0)
来自docs`:
def pre_save(self, obj):
obj.owner = self.request.user