Django_filters проверяют, существует ли значение/соединение
Hej!
Я ищу вариант, как фильтровать, ЕСЛИ значение существует, само значение не имеет значения. Чтобы отфильтровать все учреждения с данным AddOn.
Лучше всего было бы установить флажок, где я могу "проверить", хочу ли я, чтобы записи моей базы данных фильтровались по этой переменной или нет. Если флажок установлен, я хочу отфильтровать все записи, которые имеют данную переменную, а если флажок не установлен, я не хочу фильтровать.
models.py
class Institution(models.Model):
name = models.CharField(
verbose_name=_("Name of the institution"),
max_length=200,
)
abbreviation = models.CharField( # null=False, but "" allowed. Is Django convention
verbose_name=_("Acronym"),
max_length=25,
blank=True,
help_text=_("if applicable"),
)
class AddInstitutionMorebio(models.Model):
institution = models.OneToOneField(
Institution,
on_delete=models.PROTECT,
related_name="institution_morebio"
)
id_morebio = models.CharField(
max_length=6,
unique = True
)
filters.py
class InstitutionFilter(django_filters.FilterSet):
name = django_filters.CharFilter(method='name_filter', label="Name")
morebio_id = AddInstitutionMorebio.objects.filter(id_morebio=True) # this does nothing
Кто-нибудь знает, что делать? Любая помощь будет принята с благодарностью! :)
Если я вас понял, вы можете использовать exclude с exact или iexact.
Вместо:
.filter(id_morebio=True)
Попытка:
.exclude(id_morebio__exact="")
Обратите внимание, что перед __ стоит двойное подчеркивание exact. Это в основном исключит все записи, которые имеют именно "" как id_morebio значение.
morebio_id = BooleanFilter(lookup_expr='isnull', field_name='institution_morebio__id_morebio', label='MoreBio')
это решение, которое я нашел. Просто если кто-то еще борется с тем же самым.