Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django模型序列化程序中将当前用户添加到字段中_Python_Django_Django Rest Framework - Fatal编程技术网

Python 如何在django模型序列化程序中将当前用户添加到字段中

Python 如何在django模型序列化程序中将当前用户添加到字段中,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在django rest框架中开发一个应用程序。以下是我的序列化程序: class MySerializer(serializers.HyperlinkedModelSerializer): class Meta: model = My fields = ('user','title','description') 问题是,当我运行它时,它要求像这样选择用户: 我希望无论哪个用户登录,他都应该自动添加到用户字段。在django网站开发中,我曾经使用

我正在django rest框架中开发一个应用程序。以下是我的序列化程序:

class MySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = My
        fields = ('user','title','description')
问题是,当我运行它时,它要求像这样选择用户:


我希望无论哪个用户登录,他都应该自动添加到用户字段。在django网站开发中,我曾经使用
request.user
,但如何在django rest框架中实现它?

一个可以用来表示当前用户的默认类。为了使用它,“请求”必须在实例化序列化程序时作为上下文字典的一部分提供

owner = serializers.HiddenField(
    default=serializers.CurrentUserDefault()
)
详情如下:


希望这会对你有所帮助,你可以像上课一样做一些事情

MySerializer(serializers.HyperlinkedModelSerializer):
    user = serializers.ReadOnlyField()
    class Meta:
        model = My
        fields = ('user','title','description')
调用序列化程序时,只需在views.py或serializer create方法中将当前用户添加到序列化程序中

  • In views.py

    from rest_framework.permissions import IsAuthenticate
    
    class MyView(generics.ListCreateAPIView):
        permission_classes = (IsAuthenticated,)
        def perform_create(self, serializer):
            serializer.save(user=self.request.user)
    
    serializer.save(user=request.user)

  • 在序列化程序中创建方法

    def创建(自我验证的_数据):
    已验证的_数据['user']=request.user.id
    obj=ExampleModel.objects.create(**已验证的_数据)
    返回obj


  • 如果扩展django视图泛型类,则可以在views.py中添加

    from rest_framework.permissions import IsAuthenticate
    
    class MyView(generics.ListCreateAPIView):
        permission_classes = (IsAuthenticated,)
        def perform_create(self, serializer):
            serializer.save(user=self.request.user)
    
    然后在serializers.py中

    class MySerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = My
            fields = ('user','title','description')
            read_only_fields = ('user',) # Add this
    

    试试这个,我正在使用modelViewSet,而不是generics.ListCreateAPIView来查看我的视图。我必须将def create(自我验证的_数据)放在哪里??根据语法,您的解决方案似乎是正确的,但我得到以下错误:不是JSON serializableoh,那么您可能需要更改`user=serializers.ReadOnlyField()`而不是像'user=serializers.ReadOnlyField(source='user.id')`thankyou@shady这样的东西,但问题仍然存在,如何将request.user添加到用户字段。因为source='user.id'向它添加了null,所以我得到了上面我已经告诉过您的错误,当您在views.py中调用序列化程序类save方法时,而不是使用ExampleSerializer.save,而是使用ExampleSerializer.save(user=request.user)。