Django rest 框架深度序列化器仅在 to_representation 中

Posted

技术标签:

【中文标题】Django rest 框架深度序列化器仅在 to_representation 中【英文标题】:Django rest framework depth serializer only in to_representation 【发布时间】:2022-01-23 20:40:49 【问题描述】:

我有一个带有许多外键的模型。我想做一个只有 id 的 POST 并收到深度为 1 的响应。当我设置 depth=1 时它不起作用。

class State(models.Model):
   name = models.CharField(max_length=255)

class City(models.Model):
   state = models.ForeingKey(State, on_delete=models.PROTECT)
   name = models.CharField(max_length=255)

class CitySerializer(serializers.ModelSerializer):
   class Meta:
       model = City
       fields = '__all__'

我想发一些这样的


"state":1,
"name":"City Name"

得到


"id":1,
"name":"City Name",
"state":
           "id":1,
           "name": "State Name"
        

【问题讨论】:

你能分享更多细节吗?比如包含一些代码,以便更好地理解。 【参考方案1】:

您是否尝试过创建StateSerializer 并在CitySerializer 中使用它?

class StateSerializer(serializers.ModelSerializer):
    class Meta:
        model = State
        fields = '__all__'

class CitySerializer(serializers.ModelSerializer):
    state = StateSerializer(read_only=True)

    class Meta:
        model = City
        fields = '__all__'

查看文档here。

【讨论】:

使用 read_only 我无法发布设置州的城市

以上是关于Django rest 框架深度序列化器仅在 to_representation 中的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest 框架和 JSONField

Django Rest Framework:如何将数据传递给嵌套的序列化器并仅在自定义验证后创建对象

Django REST框架:POST请求:仅在数据不存在时如何保存数据

Django后端开发学习笔记Django REST Framework的序列化器

Django后端开发学习笔记Django REST Framework的序列化器

Django后端开发学习笔记Django REST Framework的序列化器