Сериализация пользовательского поля подсчета в DRF

Я пытаюсь отправить сериализованное пользовательское поле, которое содержит количество всех товаров в категории в сосуде; Я пытаюсь понять, почему эта строка работает:

vessel_inventory_category_count = serializers.IntegerField(
        source='vessel_inventory_category.count',
        read_only=True
    )

но это не так :

 vessel_inventory_item_count = serializers.IntegerField(
        source='category_items.count',
        read_only=True
    )

serializer.py :

class VesselInfoSerializer(serializers.ModelSerializer):
    vessel_component_count = serializers.IntegerField(
        source='vessel_components.count',
        read_only=True
    )
    vessel_inventory_category_count = serializers.IntegerField(
        source='vessel_inventory_category.count',
        read_only=True
    )
    vessel_inventory_item_count = serializers.IntegerField(
        source='category_items.count',
        read_only=True
    )

class Meta:
    model = Vessel
    fields = '__all__' 

models.py

class Category(models.Model):
    name = models.CharField(max_length=150, null=True, blank=True)
    vessel = models.ForeignKey(
        Vessel, blank=True, null=True, on_delete=models.CASCADE, related_name='vessel_inventory_category')

    def __str__(self):
        return self.name


class Item(models.Model):
    name = models.CharField(max_length=150, null=True, blank=True)
    category = models.ForeignKey(
        Category, blank=True, null=True, on_delete=models.CASCADE, related_name='category_items')

    def __str__(self):
        return self.name
vessel_inventory_item_count = serializers.SerializerMethodField()

def get_vessel_inventory_item_count(self, obj):
    # get vessel related category ids
    categories_id = list(obj.vessel_inventory_category.values_list('id', flat=True))
    # return count of those items which are related to vessel category
    return Item.objects.filter(category_id__in=categories_id).count()
Вернуться на верх