Как применить фильтр Джанго, только если оба поля имеют значениеPython

Программы на Python
Ответить
Anonymous
 Как применить фильтр Джанго, только если оба поля имеют значение

Сообщение Anonymous »

У меня есть простой интерфейс фильтров Django, подобный этому
Изображение
Вот как я написал фильтры, но, конечно, это неправильно, потому что фильтр добавляется, даже когда я выбираю только одно поле. Кроме того, я использую один и тот же набор фильтров для обоих.

Код: Выделить всё

tipo_oid = filters.ChoiceFilter(label='Tipo Identificativo',
choices = TipoOid.objects.all().values_list("id","denominazione").exclude(annullato=True).filter(id__in=[2,3,12,22,9,49]).order_by('denominazione'),
method='filter_ide')

identificativo = filters.CharFilter(label='Identificativo', method='filter_ide')

def filter_ide(self, queryset, name, value):

if name == 'tipo_oid':
filtroPfIdInPfIde = PfIdentificativi.objects.filter(pf_id=OuterRef('id')).filter(tipo_oid=value).exclude(annullato=True)
queryset = queryset.filter(Exists(filtroPfIdInPfIde))
if name =='identificativo':
filtroIdeInPfIde = PfIdentificativi.objects.filter(pf_id=OuterRef('id')).filter(identificativo=value).exclude(annullato=True)
queryset = queryset.filter(Exists(filtroIdeInPfIde))
Мне нужно игнорировать, если только одно из полей имеет значение, и применять фильтр() к набору запросов только один раз и только в том случае, если оба поля имеют значение.
Как бы вы это сделали?
Теперь, даже если бы я использовал два отдельных фильтра, результат не был бы тем, который мне хотелось бы.
Я думаю, я мог бы просто сделать это в viewSet , но это не то, что мне нужно, потому что я хочу сделать это в Фильтре.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ve-a-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»