我有Folder
模型。 Folder
foreignkey
User
称为folders
。
在 django rest 框架中,我想创建新的Folder
对象。如何指定"在self.request.user.folder创建对象"?在当前(开箱即用的香草ModelViewSet
)实现下,我收到错误:
folder.folder.user_id可能不是空
这表明我们尝试创建的对象Folder
没有指定user
。
是否有内置方法,或者我需要重写 create
方法并将user
作为参数传递给序列化程序?
请注意,由于安全问题,我们不想在request.DATA
传递user_id
。
models.py:
class FolderModel(Model):
user = ForeignKey(User, related_name='folders')
title = CharField(max_length=100)
views.py:
class FolderView(viewsets.ModelViewSet):
serializer_class = serializers.FoldereSerializer
model = FolderModel
def get_queryset(self):
return self.request.user.folders.all()
原始答案从DRF 3.0开始不再有效,因为功能已更改。相关文档在这里。
从文档中:
pre_save 和 post_save 钩子不再存在,但替换为 perform_create(self,序列化程序)和 perform_update(self,序列化程序)。
这些方法应通过调用 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)
fom the docs':
def pre_save(self, obj):
obj.owner = self.request.user