Python 在Django REST中自动设置POST上的用户id
我正在尝试使用Django REST发布一个“记录”。我希望Django自动设置登录用户的用户id views.py:Python 在Django REST中自动设置POST上的用户id,python,django,django-rest-framework,django-rest-auth,Python,Django,Django Rest Framework,Django Rest Auth,我正在尝试使用Django REST发布一个“记录”。我希望Django自动设置登录用户的用户id views.py: class ItemViewSet(viewsets.ModelViewSet): queryset = Item.objects.all() serializer_class = ItemSerializer def perform_create(self, serializer): serializer.save(owner=sel
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class MyUser(EmailAbstractUser):
date_of_birth = models.DateField('Date of birth', null=True, blank=True)
objects = EmailUserManager()
def pre_save(self, obj):
obj.owner = self.request.user
serializers.py:
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'created', 'owner', 'desc')
read_only_fields = ('owner',)
owner = serializers.Field(source='owner.id')
models.py:
class Item(models.Model):
created = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey('appserver.MyUser', related_name='appserver')
desc = models.CharField(max_length=100, blank=True, default='')
我正在使用django rest authemail 0.1.4中的EmailAbstractUser:
views.py:
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class MyUser(EmailAbstractUser):
date_of_birth = models.DateField('Date of birth', null=True, blank=True)
objects = EmailUserManager()
def pre_save(self, obj):
obj.owner = self.request.user
非常感谢您的帮助。您可以覆盖ItemViewSet中的“执行创建”方法,如下所示:
def perform_create(self, serializer):
return serializer.save(owner=self.request.user)
如果要将此属性设置为请求用户,则仅在创建时设置,现在即可设置。
但是,如果您也想在更新时重新设置所有者,您也必须覆盖执行更新方法(以相同的方式)。您可以覆盖ItemViewSet中的执行创建方法,如下所示:
def perform_create(self, serializer):
return serializer.save(owner=self.request.user)
如果要将此属性设置为请求用户,则仅在创建时设置,现在即可设置。
但是,如果您也想在更新时重新设置所有者,您也必须覆盖perform_update方法(以相同的方式)。好的,我自己解决了这个问题: 在serializers.py中的ItemSerializer中:
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'created', 'owner', 'desc')
read_only_fields = ('owner',)
owner = serializers.Field(source='owner.id')
在models.py中的项中
owner = models.ForeignKey(MyUser)
在views.py中的ItemViewSet中:
def pre_save(self, obj):
obj.owner = self.request.user
好的,我自己解决了这个问题: 在serializers.py中的ItemSerializer中:
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'created', 'owner', 'desc')
read_only_fields = ('owner',)
owner = serializers.Field(source='owner.id')
在models.py中的项中
owner = models.ForeignKey(MyUser)
在views.py中的ItemViewSet中:
def pre_save(self, obj):
obj.owner = self.request.user
您必须首先使用request.users设置用户的实例这些只是您的模型-您的发布代码在哪里?当我尝试发布时,它告诉我我需要明确设置所有者id,所以问题不在POST AFAIK中。你必须首先使用请求设置用户的实例。users这些只是你的模型-你的发布代码在哪里?当我尝试发布时,它告诉我我明确需要设置所有者id,所以问题不在POST AFAIK中。嗨,我将其添加到我的ItemViewSet中尝试此操作,但仍然会得到“owner\u id不能为null”。我已经更改了上面的代码以反映这一点。您应该向视图集中添加一个权限类,该类强制用户通过身份验证才能访问它。否则,self.request.user可能是匿名用户…您好,我已将此添加到我的ItemViewSet尝试此操作,但仍然会得到“owner\u id不能为null”。我已经更改了上面的代码以反映这一点。您应该向视图集中添加一个权限类,该类强制用户通过身份验证才能访问它。否则,self.request.user可能是匿名用户。。。