#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/…