Python 如何在django模型序列化程序中将当前用户添加到字段中
我正在django rest框架中开发一个应用程序。以下是我的序列化程序: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网站开发中,我曾经使用
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方法中将当前用户添加到序列化程序中
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)。