Django Rest Framework Create for self.request.user.<model>



我有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

相关内容

最新更新