【发布时间】:2020-04-13 16:10:46
【问题描述】:
我的表定义如下。
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__'
这是相同的交互式控制台
Link to console image(由于声誉较低,无法添加)
这里 UniqueConstraint 不起作用,为什么? 我在同一个项目中多次使用 models.UniqueConstraint,但在这种情况下不起作用。
我的配置是 Django - 3.0.4 Django 休息框架 - 3.11.0 数据库 - MySql
请帮忙询问是否遗漏了任何信息。
【问题讨论】:
-
请添加更多关于什么不起作用的信息。你看到错误了吗?或者您可以显示一个插入两个冲突记录的 shell 会话吗?迁移工作正常吗?
-
你好@AdamJohnson,我用更多信息更新了这个问题,请检查它并询问是否有任何遗漏,至于我没有收到任何错误,相同的记录被插入到数据库中并且是迁移工作正常。
标签: django django-models django-rest-framework django-mysql