在Django REST中自动设置用户id

2024-04-24 16:45:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Django REST发布一个“记录”。我希望Django自动设置登录用户的用户id。在

在视图.py以下内容:

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

在序列化程序.py以下内容:

^{pr2}$

在模型.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:

在视图.py以下内容:

class MyUser(EmailAbstractUser):
    date_of_birth = models.DateField('Date of birth', null=True, blank=True)
    objects = EmailUserManager()

感谢任何帮助。在


Tags: django用户pyself视图trueobjectsmodels
2条回答

您可以覆盖ItemViewSet中的perform_create方法,如下所示:

def perform_create(self, serializer):
    return serializer.save(owner=self.request.user)

如果要将此属性设置为请求用户,则仅在创建时设置。 但是,如果您想在更新时重新设置所有者,那么也必须覆盖perform_update方法(以相同的方式)。在

好吧,我自己解决了这个问题:

在的ItemSerializer中序列化程序.py公司名称:

owner = serializers.Field(source='owner.id')

在项目中模型.py在

^{pr2}$

在ItemViewSet中视图.py公司名称:

def pre_save(self, obj):
    obj.owner = self.request.user

相关问题 更多 >