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

问题描述 投票:0回答:2

我有一个有很多前键的模型。我想仅使用 ids 进行 POST 并收到深度为 1 的响应。当我设置深度 = 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"
        }
}
django-rest-framework django-serializer
2个回答
0
投票

您是否尝试过制作

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__'

查看文档此处


0
投票

修改 to_representation 方法以更改输出。

    class Dimension(models.Model):
        id = models.AutoField(primary_key=True)
        height = models.CharField(max_length=8)   
        width = models.CharField(max_length=8)   
        length = models.CharField(max_length=8)
    
    class Product(models.Model):
        dimensions = models.OneToOneField(Dimension, blank=True, on_delete=models.RESTRICT)
    
    class DimensionSerializer(ModelSerializer):
        class Meta:
           model = Dimension
           fields = ["height","width","length"]
    class ProductSerializer(ModelSerializer):
        class Meta:
            model = Product
            fields = '__all__'
        def to_representation(self, instance):
            representation = super().to_representation(instance)
            representation['dimensions'] = DimensionSerializer(instance.dimensions,many=False, read_only=True).data
            return representation

有了这个你就可以发帖了。

© www.soinside.com 2019 - 2024. All rights reserved.