Я работаю над функциональностью, которая позволяет пользователям создавать пользовательские фильтры для определенных c моделей и сохранять эти результаты в виде группы. В качестве рабочего примера (для краткости импорт исключен):
class Client(models.Model):
email = CIEmailField()
class Activity(models.Model):
client = BaseForeignKey("client.Client", null=True, related_name="logged_activities")
employee = BaseForeignKey("business.Employee", null=True, related_name="logged_activities")
created = models.DateTimeField(auto_now_add=True)
Мы хотим создать фильтры, которые будут группировать Client
s по Activity
s на основе времени создания и связанных Employee
и сохранять их результаты в группе, которая будет использоваться позже. Это довольно простая задача, за исключением того, что пользователю разрешено изменять конфигурацию фильтра и обновлять поля на Client
, оба из которых могут измениться, независимо от того, соответствует ли Client
критериям фильтра. (Примечание: в этом примере невозможно обновить Client
, что может изменить набор результатов, но будущие фильтры будут.)
Мне бы хотелось, чтобы многие ко многим, чтобы мы могли легко получить группы клиент включен и, наоборот, включает клиентов в группу, но мне не совсем понятен лучший способ обработки конфигураций фильтров. В настоящее время это поддерживается в нашей системе, но фильтры не работают должным образом, и запросы фильтров выполняются всякий раз, когда необходимо использовать информацию о группе. Учитывая это, а также некоторые другие факторы, мы решили перестроить эту функциональность вместо попыток реорганизовать текущую реализацию.