Джанго доступ к вложенному объекту поля в сериализаторе - PullRequest
0 голосов
/ 16 ноября 2018

I Django-Rest имеет класс User, который содержит поле first_name, и класс Account, который содержит поля username и a_class_ref, который является отношением one-to-one'.

Как можно в сериализаторе B сделать что-то вроде:

class AccountSerializer():
    class Meta:
        model= Account
        fields= [
          'username',
          'firstname` 
        ]

Аккаунт:

class Account(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        related_name='account',
        on_delete=models.CASCADE
    )
    def username(self):
        return self.user.username <== this is the solution that I'm trying to avoid 

И User это расширенный AbstractUser от Django-rest-framework, который поставляется с first_name = models.CharField(_('first name'), max_length=30, blank=True)

Спасибо

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете объявить пользовательское поле с атрибутом source:

class BSerializer(serializers.ModelSerializer):
    a_field = serializers.CharField(source='a_class_ref.a_field')

    class Meta:
        model= B
        fields= ['b_field', 'a_field']

Редактировать

На основе опубликованных вами моделейдолжно работать следующее:

class Account(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        related_name='account',
        on_delete=models.CASCADE
    )

class AccountSerializer(serializers.ModelSerializer):
    username = serializers.CharField(source='user.username')
    firstname = serializers.CharField(source='user.first_name')

    class Meta:
        model= Account
        fields= ['username', 'firstname']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...