UniqueConstraints не работает?
class DataStatus(DjangoChoices):
draft = ChoiceItem("draft", _("Draft"))
active = ChoiceItem("active", _("Active"))
class BaseDataModel(models.Model):
class Meta:
abstract = True
class DataModel(BaseDataModel, models.Model):
"""Model class for Purchase Request."""
class Meta:
constraints = [
models.UniqueConstraint(fields=["user"], condition=Q(status="draft"), name="unique_draft_user"),
]
user = models.ForeignKey(
User,
related_name="+",
on_delete=models.CASCADE,
blank=True,
null=True,
)
status = models.CharField(
max_length=255,
null=True,
default=DataStatus.draft,
choices=DataStatus.choices,
)
Однако, похоже, я легко могу создать несколько моделей данных для одного и того же пользователя, даже если явно установить статус «черновик»:
DraftModel.objects.create(user=some_user, status="draft")
Я также заметил, что после того, как я добавил ограничения и выполнил:
manage.py makemigrations
Django сообщил, что нет миграций для применения.
Что приводит к тому, что уникальное ограничение не работает?
Это работает на django 4.2.16, используя базу данных postgres.
PostgreSQL 15.6 (Homebrew) on aarch64-apple-darwin23.2.0, compiled by Apple clang version 15.0.0 (clang-1500.1.0.2.5), 64-bit
В качестве дополнительной информации: Я также полностью удалил условие UniqueConstraint, и это по-прежнему позволяет мне создавать несколько моделей данных для одного и того же пользователя.