Django: установка unique_together в полях модели вместе с полевым условием - PullRequest
0 голосов
/ 17 января 2020

Я работаю над проектом API Django / Python, и мне нужно, чтобы одна из моих моделей имела комбинацию unique_together вместе с заданным условием для другого поля модели.

Пример:

user |  date        |from_time | to_time | status
====================================================
1    |  2020/01/01  |10 am     | 12 pm   | Active
1    |  2020/01/01  |10 am     | 12 pm   | Inactive
1    |  2020/01/01  |9 am      | 12 pm   | Inactive
1    |  2020/01/01  |12 pm     | 3 pm    | Active
----------------------------------------------------
2    |  2020/01/01  |9 am      | 3 pm    | Active
2    |  2020/01/01  |10 am     | 3 pm    | Inactive

unique_together = [['user', 'date', 'from_time'], ['user', 'date', 'to_time']]

Эта уникальная комбинация позволяет сохранить только одну запись, которая подтверждает эту комбинацию. Добавление поля «статус» к этой уникальной комбинации позволит добавить перекрывающиеся времена с одинаковым статусом. Поэтому в моем приложении мне нужно иметь только одну запись после вышеуказанной комбинации unique_together, когда ее статус «Активен», и несколько, если он «Неактивен», как показано в приведенном выше примере данных.

Удаление вышеупомянутой комбинации unique_together to UniqueConstraint также не может выдать ошибку в консоли при миграции.

constraints = [
    models.UniqueConstraint(fields=['user', 'date', 'from_time'], condition=Q(status='Active'), name='uc_user_date_from_active'),
    models.UniqueConstraint(fields=['user', 'date', 'to_time'], condition=Q(status='Active'), name='uc_user_date_to_active')
]

Ошибка

django .core.exceptions.FieldError: Присоединенные ссылки на поля не разрешены в этом query

Как я могу выполнить эту проверку в самой модели, не проверяя вручную?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...