Объект Django admin уже существует, при использовании функциональных уникальных ограничений Django 4
При создании нового объекта на сайте Django Administration я получаю ошибку "Tag with this already exists.".
Я предполагаю, что это связано с ограничениями, наложенными на модель. Однако создание объекта 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',)}