Django: Добавление уникальных совместных ошибок в одно из задействованных полей
Примечание: я задал этот вопрос на форуме Django, но поскольку я не получил ответа там, я задаю его и здесь.
Я создаю приложение с многопользовательским доступом, то есть все данные связаны с моделью арендатора. При создании моделей я часто хочу проверить уникальность, например, поля name
. Однако уникальность требуется только для каждого арендатора, а не глобально, поэтому я использую unique_together
(или UniqueConstraint
, обнаружил это слишком поздно, но буду переходить).
Однако, когда уникальность нарушается, добавляется non_field_error
. Однако я бы предпочел добавить эту ошибку в поле name
, поскольку поле арендатора неявно и не видно пользователю (арендатор всегда является арендатором вошедшего в систему пользователя и не может быть выбран).
Подскажите, как этого можно добиться, желательно в модели или, как вариант, в форме? Я думал сначала проверить модель, а потом перенести ошибку из non_field_errors в поле name, но это как-то неправильно.
Отправной точкой будет следующий код:
class Company(models.Model):
tenant = models.ForeignKey(Tenant, on_delete=models.PROTECT)
name = models.CharField(max_length=255)
class Meta:
unique_together = ('tenant', 'name')