cod*_*y46 1 python django-rest-framework
模型:
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)
Run Code Online (Sandbox Code Playgroud)
序列化器:
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']
Run Code Online (Sandbox Code Playgroud)
目前,我得到的输出低于上面的输出:
[
{
"name": 1,
"dob": "1990-05-19",
"gender": 1
}
]
Run Code Online (Sandbox Code Playgroud)
其中Person = "John Smith"的id 1和性别的id 1是"Male"。我在 stackoverflow 上找到了几个解决方案,例如:
所有这些方法都有效,但 Django Rest Framework 将外键设置为只读,并且这些字段在 DRF HTML 表单中不再可见。我的问题是如何显示外键字段值而不是 id,确保DRF HTML 表单仍然像之前一样显示这些字段
重写类to_representation的方法ProfileSerializer
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['name', 'dob', 'gender']
def to_representation(self, instance):
rep = super().to_representation(instance)
rep['gender'] = GenderSerializer(instance.gender).data
return rep
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3748 次 |
| 最近记录: |