Reputation: 600
I have a model:
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)
And I need to serialize creation of User and Model. Idea is to ask User company name while doing registration, so I have:
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
And I get error:
Got AttributeError when attempting to get a value for field
company_name
on serializerCreateUserSerializer
. The serializer field might be named incorrectly and not match any attribute or key on theUser
instance. Original exception text was: 'User' object has no attribute 'company_name'.
Anyway objects Company and User are created as I can see it in my admin panel. What am I doing wrong and how can I fix it?
Upvotes: 1
Views: 153
Reputation: 47354
You can use source
field's argument in this case:
class CreateUserSerializer(serializers.ModelSerializer):
company_name = serializers.CharField(required=True, source='company.name')
Upvotes: 1