Задать вопрос
@NickNameNew

Как отфильтровать с помощью django_filters записи по id с другой таблицы(FK)?

Есть к примеру несколько таблиц которые связаны между собой. Я хочу отфильтровать по id записи, но при фильтрации если такого id среди существующих записях, он даже не заходит в метод который я создал в классе django_filters FilterSet.
models.py
cass Message(models.Model):
    text = models.CharField(max_length=120)
class Phone(models.Model):
    message = models.ForeignKey(Message)

filters.py
class PhoneFilter(filters.FilterSet):
    class Meta:
        model = Phone
        fields = ['id', 'message_id']
    message_id = django_filters.AllValuesMultipleFilter(method='get_message_id')

    
    def get_message_id(self, queryset, name, value):
        try:
        if type(value) == list:
            local_queryset = queryset.filter(message_id=value.pop())
            for v in value:
                local_queryset |= queryset.filter(message_id=int(v))
            return local_queryset
        else:
            return queryset.filter(message_id=int(value))

views:
Функция через которую я делал вызов фильтра:
def create_list_response_paginator(obj, filter, query_data, serializer):
    result_filter = filter(query_data).qs

    page = obj.paginate_queryset(result_filter)
    if page is not None:
        result = serializer(page, many=True).data
        # result = page
    else:
        result = serializer(result_filter, many=True).data

    data = {
        'count': obj.paginator.count,
        'next': obj.paginator.get_next_link(),
        'previous': obj.paginator.get_previous_link(),
        'results': result[:1000]
    }

    return data

Не могу понять как отфильтровать все это правильно.
Нужно что бы Если приходили несколько id он искал и вытаскивал все, если нет такого в записях то выдавал, только те которые есть из запроса ?message_id=1&message_id=2&message_id=3.
Сейчас выдаёт все записи если нет такого id и получается что ничего не фильтрует

Пример придуман и с реальностью не имеет ничего общего
  • Вопрос задан
  • 471 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы