刚刚开始使用Django,并且遇到了关于如何创建slug的链接here。有人告诉我对现有模型进行以下更改:
CurrencySelect.ClickListener {
var Selected = this.value;
var Rate = Conversions[Selected];
LoopThroughAllPriceElements {
var NewPrice = CurrentPrice/Text * Rate
ThisPriceElementsText = NewPrice
}
FunctionToSaveSelectionToCookie(Rate);
}
LoadRateFrom(Cookie);
在我尝试使用以下命令迁移数据库之前,这很顺利。
from django.template.defaultfilters import slugify
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
def __unicode__(self):
return self.name
以上问了一个默认值,所以按照指南,我给了它''。然后:
python manage.py makemigrations
以上返回" DETAIL:Key(slug)=()是重复的。"
我不完全确定为什么会这样。也许是因为我添加了一个独特的新领域,我不能用“'”填充它。如果是这样,我需要做什么才能填充数据库?
答案 0 :(得分:7)
文档explains how to migrate in these circumstances。快速摘要:
答案 1 :(得分:0)
实际上,我发现了一种更容易的方法来覆盖管理过滤器列表,从而解决了重复字段的错误,因此您可以在管理面板中过滤这些字段,以获取所有重复的字段并重命名它们,然后进行迁移。 。,它将在删除所有重复项后起作用。
首先创建custom_filter.py文件,并在其中包含此代码(假设您有一个名称为slug的字段)
from django.contrib.admin import SimpleListFilter
class DuplicatSlugFilter(SimpleListFilter):
"""
This filter is being used in django admin panel.
"""
title = "Duplicates"
parameter_name = "slug"
def lookups(self, request, model_admin):
return (("duplicates", "Duplicates"),)
def queryset(self, request, queryset):
if not self.value():
return queryset
if self.value().lower() == "duplicates":
return queryset.filter().exclude(
id__in=[slug.id for slug in queryset.distinct("slug").order_by("slug")]
)
然后将这些行添加到admin.py文件中:
from .custom_filter import DuplicatSlugFilter
class CategoryAdmin(admin.ModelAdmin):
list_filter = (DuplicatSlugFilter,)
admin.site.register(Category, CategoryAdmin)
祝你好运