首页 > 解决方案 > CurrentUserDefault 在使用 Django Rest 时不起作用

问题描述

我正在使用 Django / Django Rest Framework,我正在寻找一种解决方案来自动插入记录的用户 ID。

我尝试使用, user = serializers.HiddenField(default=serializers.CurrentUserDefault())

但我不工作

这是我的序列化程序类

from rest_framework import serializers
from contact.models import Contact

class ContactSerializer(serializers.ModelSerializer):

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

    class Meta:
        model = Contact
        fields = '__all__'

我的观点 :

class ContactView(ListModelMixin, viewsets.GenericViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer

    def create(self, request):
        serializeObject = ContactSerializer(data = request.data, many=True)
        if serializeObject.is_valid():
            serializeObject.save()
            contactObject = Contact.objects.all()
            contactSerializer = ContactSerializer(contactObject, many=True)
            return Response(contactSerializer.data, status = status.HTTP_201_CREATED)
        return Response(serializeObject.errors, status.HTTP_400_BAD_REQUEST)

标签: djangodjango-rest-framework

解决方案


当您使用时,CurrentUserDefault您需要将请求传递context给您的序列化程序,因为序列化程序将从那里获取当前用户。请参阅包括额外的上下文 [DRF 文档]

class ContactView(ListModelMixin, viewsets.GenericViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer

    def create(self, request):
        serializeObject = ContactSerializer(data = request.data, many=True, context={'request': request})
        ...

推荐阅读