django - 如何创建基于 ID 的 PUT/POST,但在 DRF 中的响应中创建详细信息?

标签 django rest django-rest-framework

我遇到的情况是模型具有包含详细信息的外键。前任。有两种型号

class Person(models):
    country = models.ForeignKey(Country)

class Country(models):
    name = models.CharField(max_length=100)

假设国家/地区已预先创建。现在,我想要 Person 的 API仅取country IdPOST/PUT请求但返回该国家/地区的详细信息,而不仅仅是 ID。

Request
{
   "id": 1,
   "country": 9
}
Response
{
   "id": 1,
   "country": {
       "id": 9,
       "name": "Some Country"
    }
}

我正在使用 Django Rest 框架。 (我可以编写序列化程序,它可以在读取和写入 API 中采用 id 或采用整个国家/地区对象)

最佳答案

您可以为此和用户 to_representation 方法编写自定义字段 CountryField 以返回对象详细信息:

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 序列化器中使用它:

class PersonSerializer(serializers.ModelSerializer):
    country = CountryField()

关于django - 如何创建基于 ID 的 PUT/POST,但在 DRF 中的响应中创建详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45008549/

相关文章:

jquery - 使用 jQuery addClass 或自定义 LoadCSS 函数将 css 应用于单个文本框

rest - 如何在 Delphi 中的 REST 响应中转发带有特殊字符的文本?

用于自定义用户模型的 Django Rest Framework token 身份验证

django - 如何将 api 放入 django 中的 celery 任务中?

django - 使用 django 和 django-voting 应用程序,如何根据每个项目的投票对查询集进行排序?

Django 查询集过滤器 - Q() | VS __in

python - Django:根据字段的状态注释 Sum Case When

asp.net-mvc - REST 服务认证 : where to store user credentials?

javascript - 为什么Alert De [Fine] D,然后两行之后,不是( meteor )?

Django Rest Framework 'RelatedManager' 对象没有属性