Python 仅当slug存在冲突时添加标识符

Python 仅当slug存在冲突时添加标识符,python,django,django-models,identifier,slug,Python,Django,Django Models,Identifier,Slug,我有slug自定义,它提供了从标题自动创建slug 这是我的密码 #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.SlugF

我有slug自定义,它提供了从标题自动创建slug

这是我的密码

#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'),
    ]

                                
#models.py
从django.db导入模型
从django.url反向导入
从django.template.defaultfilters导入slugify
类博客(models.Model)
title=models.CharField(最大长度=200)
slug=型号。SlugField(空白=真)
def get_绝对_url(自身):
返回反向('blog',kwargs={'slug':self.slug})
def保存(自身、*args、**kwargs):
如果不是self.slug:
self.slug=slugify(self.name)
return super().save(*args,**kwargs)
#管理员
类BlogAdmin(admin.ModelAdmin):
列表显示=('title')
预填充的_字段={'slug':('title',)}
admin.site.register(Blog,BlogAdmin)
#url.py
从django.url导入路径
从。视图导入*
URL模式=[
路径('blog/',entry.as_view(),name='entry'),
]
我想添加带有编号的标识符,但前提是存在冲突。 我想要的场景如下:

让我们假设

管理员创建一个博客, 博客标题为“伦敦旅游指南”->这是第一次创建具有此标题的博客。
所以slug是“伦敦旅游指南”

第二次管理员创建了一个名为“伦敦旅游指南”的博客 slug应该是“london-travel-guide-1”

第三次,slug应该是“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)