Есть к примеру несколько таблиц которые связаны между собой. Я хочу отфильтровать по 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 и получается что ничего не фильтрует
Пример придуман и с реальностью не имеет ничего общего