问题描述
这是我的代码,
#models.py
from django.db import models
from django.urls import reverse
from django.template.defaultfilters import slugify
class Blog(models.Model)
title = models.CharField(max_length=200)
slug = models.SlugField(blank=True)
def get_absolute_url(self):
return reverse('blog',kwargs={'slug':self.slug})
def save(self,*args,**kwargs):
if not self.slug:
self.slug = slugify(self.name)
return super().save(*args,**kwargs)
#admin.py
class BlogAdmin(admin.ModelAdmin):
list_display = ('title')
prepopulated_fields = {'slug': ('title',)}
admin.site.register(Blog,BlogAdmin)
#urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('blog/<slug:slug>',entry.as_view(),name='entry'),]
我想添加带有数字的标识符,但前提是存在冲突。 我想要的场景如下,
让我们假设
管理员创建博客,
博客标题是“伦敦旅行指南”->这是第一次用此标题创建博客。
所以是“伦敦旅行指南”
第二次管理员创建了一个标题为“伦敦旅行指南”的博客 子弹应该是“ london-travel-guide-1”
第三次,该子弹应该是“ london-travel-guide-2” 等等。
感谢您的帮助,我该如何实现呢?
解决方法
我自己解决了这个问题。
#utils.py
from django.utils.text import slugify
def generate_unique_slug(Blog,title):
origin_slug = slugify(title)
unique_slug = origin_slug
numb = 1
while Country.objects.filter(slug=unique_slug).exists():
unique_slug = '%s-%d' % (origin_slug,numb)
numb += 1
return unique_slug
#models.py
from django.db import models
from core.utils import generate_unique_slug
from . import *
class Blog(models.Model)
title = models.CharField(max_length=200)
slug = models.SlugField(blank=True)
def save(self,*args,**kwargs):
if self.slug:
if slugify(self.title) != self.slug:
self.slug = generate_unique_slug(Country,self.title)
else:
self.slug = generate_unique_slug(Country,self.title)
super(Blog,self).save(*args,**kwargs)