django - 具有非模型字段序列化的 AttributeError
问题描述
我有一个模型:
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
我得到错误:
company_name
尝试获取序列化程序上的字段值时出现 AttributeErrorCreateUserSerializer
。序列化器字段可能命名不正确,并且与User
实例上的任何属性或键都不匹配。原始异常文本是:“用户”对象没有属性“公司名称”。
正如我在管理面板中看到的那样,无论如何都会创建对象公司和用户。我做错了什么,我该如何解决?
解决方案
在这种情况下,您可以使用source
字段的参数:
class CreateUserSerializer(serializers.ModelSerializer):
company_name = serializers.CharField(required=True, source='company.name')
推荐阅读
- android - TimePickerDialogue Fragment kotlin 需要哪个 Fragment Manager
- airflow - 为什么即使分支任务失败并且触发规则成功,气流下游任务也会完成?
- powerbi - 无法为 Power BI 服务中的视觉对象加载数据
- java - java根据desc中的位置对名称进行排序
- tizen - 如何在 Tizen 手表网络应用程序上获取移动代理?
- node.js - heroku 错误:找不到模块'/app/index.js'
- c# - 使用 Castle Windsor 解析 HttpRequestMessage
- firebase - 我想为不同的项目编写一个 Firebase 函数。我怎么做?
- swift - 实现“浮动气泡”对象的最佳方法
- c# - 表单流的动态返回类型