[英]Django - Slugs - Key (slug)=() is duplicated
剛剛開始玩弄 Django,並在這里找到了一個關於如何創建 slug 的鏈接。 我被告知對現有模型執行以下更改:
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
上面要求一個默認值,所以按照指南,我給了它''。 然后:
python manage.py migrate
上面返回“詳細信息:密鑰(slug)=()是重復的。”
我不完全確定為什么會發生這種情況。 也許是因為我添加了一個獨特的新字段,但我無法用 '' 填充它? 如果是這樣,我必須做什么才能填充數據庫?
該文檔解釋了如何在這些情況下進行遷移。 快速總結:
實際上我找到了一種更簡單的方法來覆蓋管理過濾器列表,它修復了我重復字段的錯誤,因此您可以過濾管理面板中的字段以獲取所有重復的字段並重命名它們......然后遷移..它刪除所有重復后將工作..
首先創建 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)
祝你好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.