【发布时间】:2021-05-10 18:49:53
【问题描述】:
我有一个大模型,我想简化为一个名称和它的 ID。我的(相关)代码如下:
### Models
class Person(models.Model):
first_name = models.CharField(max_length=80)
last_name = models.CharField(max_length=80)
class Employee(models.Model):
person = models.OneToOneField('Person', related_name='employee', on_delete=models.CASCADE)
class Job(models.Model):
employee = models.ForeignKey('Employee')
### Serializers
class SimpleEmployeeSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
name = instance.person.first_name + ' ' + instance.person.last_name
return {
'id': instance.id,
'name': name,
}
def to_internal_value(self, data):
try:
try:
obj_id = data['id']
return Employee.objects.get(id=obj_id)
except KeyError:
raise serializers.ValidationError(
'id is a required field.'
)
except ValueError:
raise serializers.ValidationError(
'id must be an integer.'
)
except Employee.DoesNotExist:
raise serializers.ValidationError(
'Obj does not exist.'
)
class Meta:
model = Employee
fields = ['id', 'name']
class JobSerializer(WritableNestedModelSerializer):
employee = SimpleEmployeeSerializer(many=False)
class Meta:
model = MpProject
fields = [
'id',
'employee',
]
请不要担心这是否应该是 OneToOne 关系,我的模型在实践中更复杂。
我得到的错误是ImproperlyConfigured: Field name 'name' is not valid for model 'Employee'. 当我没有实现to_internal_value 时我没有得到这个错误,但我需要这个,因为我希望能够使用@987654325 发布一个新的Job @ 格式。谁能告诉我为什么会出现这个错误?
【问题讨论】:
标签: django django-rest-framework