【问题标题】:Django REST Framework - query limit on nested serializer?Django REST Framework - 嵌套序列化程序的查询限制?
【发布时间】:2014-08-13 18:41:26
【问题描述】:

我有一个表通过外键与另一个表相关的情况,如下所示:

models.py

class Container(models.Model):
    size  = models.CharField(max_length=20)
    shape = models.CharField(max_length=20)

class Item(models.Model):
    container = models.ForeignKey(Container, related_name='items')
    name  = models.CharField(max_length=20)
    color = models.CharField(max_length=20)

serializers.py

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item


class ContainerSerializer(serializers.ModelSerializer):
    items = ItemSerializer(many=True)

    class Meta:
        model = Container
        fields = ('size', 'shape', 'items')

这很好用,但我的问题是容器中的所有项目都被序列化了。我只希望对 color='green' 的项目进行序列化。

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:
    class ContainerSerializer(serializers.ModelSerializer):
        items = serializers.SerializerMethodField()
    
        def get_items(self, obj):
            query = Item.objects.filter(item_set__color='green')
            serializer = ItemSerializer(query, many=True)
            return serializer.data
    
        class Meta:
            model = Container
            fields = ('size', 'shape', 'items')
    

    【讨论】:

      【解决方案2】:

      不是改变序列化器的工作方式,而是一种更简单的方法,它只是用绿色项目过滤你的容器,然后他们尝试序列化它

      你可以这样做:

      container_objects = Container.objects.filter(id='your_container_id',item_set__color='green')
      serialized_containers = YourContainerSerializer(data=container_objects)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-09
        • 2018-07-06
        • 1970-01-01
        • 2014-08-20
        • 1970-01-01
        • 2018-05-20
        相关资源
        最近更新 更多