Django rest框架自动填充user.id/username

时间:2018-03-19 16:42:16

标签: python django django-rest-framework

我试图链接“所有者”'我的模型字段到AbstractUser。我需要它自动完成,我能够自己做的唯一想法就是允许用户在每个现有用户之间选择,而不是我想要的。我想没有一个字段来操作,但是一个结果序列化程序,其id或用户名为User,它添加了模型。我试图找几天的解决方案,我已经尝试过组合ForeignKey,PrimaryKeys,OneToOneField,HiddenField,get_user,perform_create,但我确实做错了什么,而我&#39 ;我几乎失去了它。我尝试的最后一件事就是像DRF QuickStart教程那样在视图中进行def_perform,但没有结果。

我添加了一些代码示例以便更容易理解:

我的 AbstractUser 模型:

from django.db import models
from django.contrib.auth.models import AbstractUser


class UserProfile(AbstractUser):

    username = models.CharField(max_length=20, unique=True)
...

我在设置中将它添加到AUTH_USER_MODEL =。 还有其他型号我想与用户链接:

    from django.db import models
from users.models.user import UserProfile


class MyPhoto(models.Model):
    owner = models.ForeignKey(UserProfile, related_name='photos', on_delete=models.CASCADE, null=True)
    image = models.ImageField(upload_to='Images')

serializer.py

class MyPhotoSerializer(serializers.ModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')

    class Meta:
        model = MyPhoto
        fields = ('pk', 'image', 'owner')

    def create(self, validated_data):
        photo = MyPhoto.objects.create(
            image=validated_data['image']
            )
        photo.save()

        return photo

views.py

class UpdateMyPhotoViewSet(viewsets.ModelViewSet):
    queryset = MyPhoto.objects.all()
    serializer_class = MyPhotoSerializer
    permission_classes = (IsAuthenticated,)

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

现在我无法看到所有者字段结果。

提前致谢。

0 个答案:

没有答案