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, и это по-прежнему позволяет мне создавать несколько моделей данных для одного и того же пользователя.

Вернуться на верх