AttributeError с немодельной сериализацией поля - PullRequest
0 голосов
/ 01 июля 2018

У меня есть модель:

class Company(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    name = models.CharField(max_length=30, blank=True)
    balance = models.DecimalField(max_digits=10, decimal_places=2, default=0)
    phone_number = PhoneNumberField(null=True, blank=True)
    active = models.BooleanField(default=False)

И мне нужно сериализовать создание пользователя и модели. Идея состоит в том, чтобы спросить название компании пользователя при регистрации, поэтому у меня есть:

class CreateUserSerializer(serializers.ModelSerializer):
    company_name = serializers.CharField(required=True)

    class Meta:
        model = User
        fields = ('id', 'company_name', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        username = validated_data['username']
        email = validated_data['email']
        password = validated_data['password']
        company_name = validated_data['company_name']
        user = User.objects.create(username=username, email=email, password=password)
        Company.objects.create(user=user, name=company_name)
        return user

И я получаю ошибку:

Получил AttributeError при попытке получить значение для поля company_name на сериализаторе CreateUserSerializer. Сериализатор поле может быть названо неправильно и не соответствовать ни одному атрибуту или ключу на User экземпляр. Исходный текст исключения был: объект «Пользователь» не имеет атрибут 'company_name'.

В любом случае объекты «Компания» и «Пользователь» создаются так, как я могу видеть в своей панели администратора. Что я делаю не так и как я могу это исправить?

1 Ответ

0 голосов
/ 01 июля 2018

Вы можете использовать source аргумент поля в этом случае:

class CreateUserSerializer(serializers.ModelSerializer):
    company_name = serializers.CharField(required=True, source='company.name')
...