微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅当子弹冲突时才添加标识符

如何解决仅当子弹冲突时才添加标识符

我对子弹进行自定义,它提供了从标题自动创建子弹的功能

这是我的代码

#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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。