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

时间:2016-12-23 04:05:46

标签: python django django-rest-framework

我正在开发django-rest-framework中的应用程序。以下是我的序列化器:

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

问题在于,当我运行它时,它会要求选择用户:

enter image description here

我希望无论用户登录哪个用户,都应自动将其添加到用户字段中。在django网站开发中,我曾经使用request.user来做,但是如何在django rest框架中进行呢?

3 个答案:

答案 0 :(得分:0)

可用于表示当前用户的默认类。为了使用它,在实例化序列化器时,'request'必须作为上下文字典的一部分提供。

owner = serializers.HiddenField(
    default=serializers.CurrentUserDefault()
)

此处有更多详情: http://www.django-rest-framework.org/api-guide/validators/#currentuserdefault

希望这会有所帮助

答案 1 :(得分:0)

你会做类似

的事情
MySerializer(serializers.HyperlinkedModelSerializer):
    user = serializers.ReadOnlyField()
    class Meta:
        model = My
        fields = ('user','title','description')

调用序列化程序时,只需将当前用户添加到序列化程序中,无论是在views.py中还是在序列化程序创建方法中。

  1. 在views.py

    serializer.save(user=request.user)

  2. 在序列化程序中创建方法

    def create(self, validated_data): validated_data['user'] = request.user.id obj = ExampleModel.objects.create(**validated_data) return obj

答案 2 :(得分:0)

如果扩展django view通用类,则可以添加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