django 用户对象没有属性配置文件

x759pob2  于 2022-11-18  发布在  Go
关注(0)|答案(1)|浏览(162)

谁能解释一下我为什么会得到这个错误。
我有两个具有一对一关系的模型 UserProfilemodels.py

class User(AbstractBaseUser):
    phone_number = models.IntegerField(unique=True, verbose_name='phone number')
    email = models.EmailField()

class Profile(models.Model):

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,)
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=25)

这是序列化程序.py

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields =["first_name", "last_name"]

class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ["id", "phone_number", "email", "profile",]

查看次数.py

class UserDetailsView(generics.RetrieveUpdateAPIView):
    serializer_class = UserSerializer

    def get_queryset(self):
        return User.objects.filter(pk=self.kwargs['pk'])
e5nqia27

e5nqia271#

您以错误的方式编写了序列化程序。配置文件模型具有用户列,而用户表没有配置文件列,并且在针对用户创建配置文件模型时只有一个属性使用OneToOne字段。因为一个配置文件可以包含一个用户。

models.py

class User(AbstractBaseUser):
    phone_number = models.IntegerField(unique=True, verbose_name='phone 
    number')
    email = models.EmailField()

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, 
    on_delete=models.CASCADE,)
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=25)

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ["id", "phone_number", "email"]

class ProfileSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    class Meta:
        model = Profile
        fields =["first_name", "last_name", "user"]

有关嵌套序列化程序的更多信息,请参阅官方文档

相关问题