我有一个大模型,我想将其简化为名称及其 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',
]
请不要担心这是否应该是一对一关系,我的模型在实践中更复杂。
我得到的错误是 ImproperlyConfigured: Field name 'name' is not valid for model 'Employee'.
我在没有实现 to_internal_value
时没有得到这个错误,但是我需要这个,因为我希望能够发布一个新的 {{1 }} 与 Job
格式。有人能告诉我为什么我会收到这个错误吗?
答案 0 :(得分:0)
这是因为<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
<div class="container">
<div class="row">
<div class="col">
<input type="checkbox">
</div>
<div class="col">
<p> Save My card for future payment</p>
</div><br>
</div>
</div>
fields
您可以通过添加字段来解决此问题:
class Meta:
model = Employee
fields = ['id', 'name'] # <- this line