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