Как установить неявное условие для unique=True в django orm
Я использую Django вместе с DRF, и я использую много таблиц и сложных отношений,
Использование мягкого удаления (то есть только пометка deleted_at, а не фактическое удаление чего-либо) на моих моделях с самого начала не сильно повредило, но теперь мы делаем некоторые новые изменения и удаленных экземпляров становится все больше.
поэтому уникальные ограничения db начали выдавать ошибки, я знаю и реализовал два возможных решения, одно из них - unique_together в метаклассе, с удалением at и каждого другого уникального значения,
.
другое:
class Meta:
constraints = [UniqueConstraint(fields=["name"], condition=Q(deleted_at != True))]
Однако то, что я хочу, совсем другое, я хочу избежать повторения всего этого и создать флаг уникальности следующим образом:
something_id = models.CharField(null=False, blank=False,
max_length=256, unique_undeleted=True)
обратите внимание на параметр unique_undeleted,
Я знаю, что это требует изменений в библиотеке, что, очевидно, плохо,
.
но у меня есть родительская модель, которую я использую во всех остальных,
Я подумал о создании настраиваемого конструктора, который будет проверять каждое уникальное значение, и делать добавление уникальности по условию, или я мог бы использовать это также
class MySpecialModel(parentModel):
somethingboolean= models.BooleanField(default=True, null=False)
something_id = models.CharField(null=False, blank=False,
max_length=256)
something_unique_too = models.CharField(null=False, blank=False,
max_length=256)
unique_undeleted_fields = ["something_id", "something_unique_too""]
и повторять итерации в родительской модели и создавать UniqueConstraint для каждого поля,
но это не кажется правильным!
любое руководство будет оценено по достоинству.