Сериализация отношений один на один в Джанго - PullRequest
0 голосов
/ 24 мая 2018

У меня есть следующие User,

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True, max_length=255)
    username = models.CharField(null=False, unique=True, max_length=255)
    full_name = models.CharField(max_length=255, blank=True, null=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

И следующая UserProfile модель,

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, )
    level = models.CharField(default="Noob", max_length=255)
    reputation = models.IntegerField(default=0)
    status = models.CharField(max_length=255, null=True, blank=True)

Пользователь имеет отношение один к одному с Profile.Это UserSerializer,

class UserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)
    location = LocationSerializer(read_only=True)
    profile = UserProfileSerializer(read_only=True)

    class Meta:
        model = models.User
        fields = (
            'id', 'email', 'mobile', 'username', 'full_name', 'password', 'is_active', 'profile',

        )

И это сериализатор профиля.

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserProfile
        fields = ('level', 'reputation', 'status',)

Проблема в том, что в сериализованном выводе для пользователя нет вложенных данных профиля.Как это исправить.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 24 мая 2018

все, что вам нужно, установлено source для profile:

class UserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)
    location = LocationSerializer(read_only=True)
    profile = UserProfileSerializer(source='userprofile', read_only=True)

userprofile - это имя отношения вашей модели User по одному на UserProfle, иначе вы можете установить related_name для атрибута user в UserProfle.

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)

, тогда ваш сериализатор будет работать нормально как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...