0

我正在尝试使用 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:

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = ('id', 'created', 'owner', 'desc')
        read_only_fields = ('owner',)

模型.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()

任何帮助表示赞赏。

4

2 回答 2

4

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

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

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

于 2015-06-02T06:23:57.710 回答
0

好的,我实际上自己解决了这个问题:

在 serializers.py 的 ItemSerializer 中:

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
于 2015-07-21T20:02:28.470 回答