Использование ограничений db для ограничения внешнего ключа, чтобы только один ключ имел булево значение false, а остальные true

У меня есть модель ниже

class MaintenancePersonnel(models.Model):
    performed_by=models.ForeignKey(User,on_delete=models.CASCADE)
    work_performed=models.ForeignKey(EquipmentMaintenanceSchedule,on_delete=models.CASCADE)
    comments=models.TextField(blank=True,null=True)
    is_performed=models.BooleanField(default=False)

Я хочу, чтобы для данной выполненной работы было только одно поле, которое имеет is_performed False

я пробовал использовать условие, но это, похоже, заставляет только одну модель иметь is_performed равным false независимо от выполненной работы

class Meta:
        constraints = [
        models.UniqueConstraint(fields=['work_performed','is_performed'], condition=models.Q(is_performed=False), name='unique_is_performed_False')
    ]

Попробуйте установить в поле UniqueConstraint только work_performed с условием is_performed.

models.UniqueConstraint(fields=['work_performed'], condition=models.Q(is_performed=False), name='unique_is_performed_False')

Это должно ограничить ваши модели одним work_performed, где is_performed равно false. Это похоже на случай, представленный в docs

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