Доброго времени суток.
У меня есть "главная" модель:
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)
Но что если апликаций со своими типами будет больше? Можно ли как-то "динамически" фильтровать? Какие еще варианты есть?
П.С. Вариант переписать структуру данных - применим в последнюю очередь.
Буду очень благодарен за помощь.