我的情况是模型有一个带有详细信息的外键。防爆。有两种模式
class Person(models):
country = models.ForeignKey(Country)
class Country(models):
name = models.CharField(max_length=100)
假设事先已创建了国家/地区。现在,我希望Person
的API仅在country Id
个请求中使用POST/PUT
,但返回该国家/地区的详细信息,而不是仅返回ID。
Request
{
"id": 1,
"country": 9
}
Response
{
"id": 1,
"country": {
"id": 9,
"name": "Some Country"
}
}
我正在使用Django Rest Framework。 (我可以编写序列化程序,在读取和写入API中取id
或取整个国家/地区对象)
答案 0 :(得分:1)
您可以为此用户编写自定义字段CountryField
,并使用用户to_representation
方法返回对象详细信息:
class CountryDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Country
fields = ('id', 'name')
class CountryField(serializers.PrimaryKeyRelatedField):
def to_representation(self, value):
country = models.Barcode.objects.get(pk=value.pk)
serializer = CountryDetailSerializer(country)
return serializer.data
def get_queryset(self):
return Country.objects.all()
在Person serializer中使用它:
class PersonSerializer(serializers.ModelSerializer):
country = CountryField()