@MAGistr_MTM
Учусь программировать

Динамический фильтр на Django?

Доброго времени суток.

У меня есть "главная" модель:
class MainProcedure(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    procedure_id = models.CharField(max_length=32)
    method_type = models.CharField(max_length=100)
    owner = models.CharField(max_length=255)

    def __str__(self):
        return f'<MainProcedure (id={self.id.hex})>'

    @property
    def specific_procedure(self):
        return getattr(self, f'{self.method_type}_procedure')


И к ней в апликациях могуть привязыватся другие модели(как О2О). Например:
class FooProcedure(AbstractProcedure):
    main_procedure = models.OneToOneField(MainProcedure, on_delete=models.CASCADE, related_name='foo_procedure')

    class Meta(AbstractProcedure.Meta):
        abstract = False

Суть такова, что Юзер может создавать процедуры разных типов, но доставать их в одном месте. С листингом все ОК, но вот когда дело идет к фильтрации, у меня дилема как сделать правильно. Например если я хочу пофильтровать по title специфической процедуры, то мне нужно сделать что-то вроде такого:
q = Q(foo_procedure__title__icontains='title') | Q(bar_procedure__title__icontains='title')
return qs.filter(q)

Но что если апликаций со своими типами будет больше? Можно ли как-то "динамически" фильтровать? Какие еще варианты есть?
П.С. Вариант переписать структуру данных - применим в последнюю очередь.
Буду очень благодарен за помощь.
  • Вопрос задан
  • 525 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы