Django REST Framework - limiting a request for a nested serializer?

I have a situation where one table is linked to another through a foreign key as follows:

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

This works fine, but my problem is that all elements in the container become serialized. I want the elements with color = "green" to be serialized.

+5
source share
2 answers
 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') 
+6
source

Instead of changing how the serializer works, it's easier, just filter its container with green color elements, and they try to serialize it

You can do something like this:

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

Source: https://habr.com/ru/post/1200261/


All Articles