当使用Django 4函数唯一约束时,Django管理对象已经存在



从Django Administration站点创建新对象时,我收到一个错误"带有此的标记已存在&";。

我想这与模型上的限制有关。但是,使用代码创建Tag对象(例如Tag.objects.create(...)(效果良好。它只在Django管理中失败。知道为什么吗?

注意:我使用的是Django 4.0中引入的函数唯一约束(https://docs.djangoproject.com/en/dev/ref/models/constraints/#django.db.models.UniqueConstraint)。我想知道我是否应该养一只虫子?

这是我的型号:

class Tag(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_('user'))
name = models.CharField(max_length=50, db_index=False, verbose_name=_('name'))
slug = models.SlugField(max_length=50, verbose_name=_('slug'))
class Meta:
ordering = ['name']
# Create an index to make tags unique per user and also an index on lowercase name to prevent inserting duplicate tags with varying case
constraints = [models.UniqueConstraint(fields=['user', 'name'], name='unique_tags_per_user'),
models.UniqueConstraint(Lower('name'), name='lower_tag_name_idx')]
def __str__(self):
return self.name

这是管理员配置:

@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
list_display = ('pk', 'user', 'name', 'slug')
list_display_links = ['pk']
fields = ('user', 'name', 'slug')
list_filter = ('user__email',)
search_fields = ('name',)
prepopulated_fields = {'slug': ('name',)}

这实际上是一个在v4.0最终版本之前修复的问题。

最新更新