模型:
class Person(models.Model):
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
def __str__(self):
return self.first_name + ' ' + self.last_name
class Gender(models.Model):
gender = models.CharField(max_length=1)
def __str__(self):
return self.gender
class Details(models.Model):
name = models.ForeignKey(Person, on_delete=models.CASCADE)
dob = models.DateField()
gender = models.ForeignKey(Gender, on_delete=models.DO_NOTHING)序列化程序:
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = '__all__'
class GenderSerializer(serializers.ModelSerializer):
class Meta:
model = Gender
fields = '__all__'
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['name', 'dob', 'gender']目前,我得到的输出低于输出,上面的内容如下:
[
{
"name": 1,
"dob": "1990-05-19",
"gender": 1
}
]其中id 1表示Person = "John“,id 1表示性别是”男性“。我有几种关于堆栈溢出的解决方案,如:
所有这些方法都可以工作,但是Django Rest Framework将外键设置为只读,这些字段不再出现在DRF表单中。我在这里的问题是如何显示外键字段值,而不是id --确保DRF表单仍然将这些字段显示为早期的。
发布于 2021-06-01 21:20:37
如果您不打算覆盖to_representation(),可以创建一个SerializerMethodField
class ProfileSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
class Meta:
model = Profile
fields = ['name', 'dob', 'gender']
# this method is called to get the value of field `name`
def get_name(self, profile):
return profile.name.namehttps://stackoverflow.com/questions/64048863
复制相似问题