0

Django REST を使用して「レコード」を投稿しようとしています。ログインしたユーザーのユーザーIDをDjangoに自動的に設定してもらいたいです。

ビュー.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 を使用しています:

ビュー.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 に答える