Как установить уникальное ограничение для преобразованных данных в Django?

#django #postgresql

Вопрос:

У меня есть модель с полями name (строка) и created_at (дата-время), и я хочу, чтобы строка с ее именем была уникальной только в течение часа, в течение которого она была создана. Вот как я пытался:

 class Person(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=250)

    class Meta:
        unique_together = ('name', 'created_at__hour')
 

Я получаю ошибку:

 (models.E012) 'unique_together' refers to the nonexistent field 'created_at__hour'.
 

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

В качестве базы данных у меня есть PostgreSQL v12.

Комментарии:

1. используйте модуль datetime или используйте часовой пояс из django.utils.

2. Вы можете попробовать построить что-то подобное с UniqueConstraint помощью , смотрите здесь: docs.djangoproject.com/en/3.2/ref/models/constraints/…

3. @YvesHary И как именно я могу использовать его в своем случае?

4. Я должен быть честен: я никогда не пробовал этого. Мне кажется, что вы можете создать условие, которое могло бы соответствовать вашим потребностям created_at__hour .

5. Некоторые исследования позже: существует метод model.validate_unique() , который вы можете перезаписать, чтобы обеспечить уникальность (но не на уровне базы данных). Смотрите здесь: docs.djangoproject.com/en/3.2/ref/models/instances/…