django rest framework为self.request.user创建。<model> </model>

时间:2013-10-26 13:48:37

标签: django django-rest-framework

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

2 个答案:

答案 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