У объектов пользователя нет профиля атрибутов

Может ли кто-нибудь объяснить мне, почему я получаю эту ошибку.

У меня есть две модели User и Profile с отношениями 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.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,)
    first_name = models.CharField(max_length=25)
    last_name = models.CharField(max_length=25)

и вот serializer.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",]

Views.py

class UserDetailsView(generics.RetrieveUpdateAPIView):
    serializer_class = UserSerializer

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

Вы неправильно написали сериализатор. Модель профиля имеет колонку пользователя & таблица пользователя не имеет колонки профиля и еще одно Используйте OneToOne filed при создании модели профиля против пользователя. Потому что один профиль может содержать одного пользователя.

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"]

для получения дополнительной информации о вложенном сериализаторе следуйте официальной документации

Вернуться на верх