Как установить неявное условие для 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 для каждого поля, но это не кажется правильным!
любое руководство будет оценено по достоинству.

Вернуться на верх