Django Rest Framework - Фильтр по настраиваемому полю - PullRequest
0 голосов
/ 20 июня 2020
• 1000 возвращает «не определено»
class OverView(serializers.ModelSerializer):

itemsoutstanding = serializers.SerializerMethodField()


    class Meta:
        model = Order
        fields = ['id','total_price', 'created_at','itemsoutstanding']


    def get_itemsoutstanding(self, obj):
        count= Items.objects.filter(order=obj.id).count()
        return count

На мой взгляд, я пытаюсь выполнить фильтрацию по столбцу сериализатора, но в нем говорится, что он не определен

    queryset = Order.objects.all()
    serializer_class = OverView

     queryset = Order.objects.filter(shop=shop)
     queryset = queryset.filter(itemsoutstanding> 0)

Есть ли способ фильтрации на основе в столбцах сериализатора?

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Вам нужно будет аннотировать набор запросов в определении, вам может потребоваться проверить django документы на наличие аннотаций и, возможно, скорректировать этот код для ваших моделей, но идея такова:

from django.db.models import Count
queryset = Order.objects.annotate(itemsoutstanding=Count("items"))

Затем вы можете использовать itemsoutstanting в фильтре и в сериализаторе как поле:

class OverView(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = ['id','total_price', 'created_at','itemsoutstanding']
0 голосов
/ 20 июня 2020

Набор запросов не имеет ничего общего с сериализатором, поэтому он не знает вашего поля, определенного в сериализаторе. Это настраиваемое поле добавляется только к сериализованным данным, а не к набору запросов. Что вам нужно сделать, так это аннотировать поле в представлении, когда вы получите набор запросов.

...