0

我有Folder模型。Folder不得不打电话。foreignkey_Userfolders

在 django rest 框架中,我想创建新Folder对象。如何指定“在 self.request.user.folders 创建对象”?在当前(开箱即用的香草ModelViewSet)实施下,我收到错误:

folder.folder.user_id 可能不为 NULL

这表明我们正在尝试创建Folder对象的 a 没有指定 a user

是否有内置方式,或者我需要覆盖该create方法并user作为参数传递给序列化程序?

user_id请注意,request.DATA由于安全问题,我们不想通过。

模型.py:

class FolderModel(Model):
    user = ForeignKey(User, related_name='folders')
    title = CharField(max_length=100)

视图.py:

class FolderView(viewsets.ModelViewSet):
    serializer_class = serializers.FoldereSerializer
    model = FolderModel

    def get_queryset(self):
        return self.request.user.folders.all()
4

2 回答 2

1

从 DRF 3.0 开始,原始答案不再有效,因为功能已经改变。相关文档在这里

从文档:

pre_save 和 post_save 钩子不再存在,而是替换为 perform_create(self, serializer) 和 perform_update(self, serializer)。

这些方法应该通过调用 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)
于 2018-10-07T14:30:23.637 回答
0

fom the docs`:

def pre_save(self, obj):
    obj.owner = self.request.user
于 2013-10-27T16:14:49.833 回答