我正在尝试使用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=self.request.user)
serializers.py:
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'created', 'owner', 'desc')
read_only_fields = ('owner',)
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 MyUser(EmailAbstractUser):
date_of_birth = models.DateField('Date of birth', null=True, blank=True)
objects = EmailUserManager()
任何帮助表示感谢。
答案 0 :(得分:3)
您可以覆盖ItemViewSet中的perform_create方法,如下所示:
def perform_create(self, serializer):
return serializer.save(owner=self.request.user)
如果要将此属性设置为请求用户,则仅在创建时将立即设置。 但是,如果您想在更新时间重新设置所有者,那么您也必须覆盖perform_update方法(以相同的方式)。
答案 1 :(得分: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