Создание моделей. Уникальное ограничение в django, но ограничение не применяется - PullRequest
0 голосов
/ 13 апреля 2020

Моя таблица определена следующим образом.

class Role(models.Model):

    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        to_field="email",
        db_column="user",
        on_delete=models.CASCADE
    )

    vertical = models.ForeignKey(
        Verticals,
        to_field="name",
        db_column="vertical",
        on_delete=models.CASCADE
    )

    product_domain = models.ForeignKey(
        ProductDomains,
        to_field="name",
        db_column="product_domain",
        null=True,
        on_delete=models.CASCADE
    )

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=[
                'user',
                'vertical',
                'product_domain'
            ],
                name='unique-permissions-per-user')
        ]

Вот сгенерированные миграции

migrations.CreateModel(
            name='Role',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('product_domain', models.ForeignKey(db_column='product_domain', null=True, on_delete=django.db.models.deletion.CASCADE, to='verticals.ProductDomains', to_field='name')),
                ('user', models.ForeignKey(db_column='user', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, to_field='email')),
                ('vertical', models.ForeignKey(db_column='vertical', on_delete=django.db.models.deletion.CASCADE, to='verticals.Verticals', to_field='name')),
            ],
        ),
        migrations.AddConstraint(
            model_name='role',
            constraint=models.UniqueConstraint(fields=('user', 'vertical', 'product_domain'), name='unique-permissions-per-user'),
        ),

Сериализаторы для ролевой модели:

class RoleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Role
        fields = '__all__'

Вот интерактивная консоль для того же

Ссылка на изображение консоли (невозможно добавить из-за меньшей репутации)

Здесь UniqueConstraint не работает, почему? Я использую models.UniqueConstraint в одном и том же проекте много раз, но в этом случае он не работает.

Моя конфигурация Django - 3.0.4 Django Rest Framework - 3.11.0 База данных - MySql

Пожалуйста, помогите и спросите, отсутствует ли какая-либо информация.

1 Ответ

0 голосов
/ 15 апреля 2020

Ваши журналы не показывают попытки вставить одну и ту же запись дважды в БД, только проверка.

Я подозреваю, Django Rest Framework не импортирует ограничения из UniqueConstraint. Я думаю, что он имеет только код для проверки со старым определением ограничения Meta.unique_together.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...