如何在Django中保存Slug Automatic?

如何在Django中保存Slug Automatic?,django,django-models,Django,Django Models,这是我自动保存slug的代码。但它不起作用,我也不知道为什么!我不可能完全错了。帮我出去 from django.db import models from django.urls import reverse from django.template.defaultfilters import slugify class Article(models.Model): title = models.CharField(max_length=50) body = models

这是我自动保存slug的代码。但它不起作用,我也不知道为什么!我不可能完全错了。帮我出去

from django.db import models
from django.urls import reverse
from django.template.defaultfilters import slugify



class Article(models.Model):
    title = models.CharField(max_length=50)
    body = models.TextField()
    slug = models.SlugField(null=False,unique=True)


    def __str__(self):
        return self.title


    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug': self.slug})


    def save(self, *args, **kwargs):  # new
        if not self.slug:
            self.slug = slugify(self.title)
        return super().save(*args, **kwargs)
但在django管理面板中,我必须手动保存slug,但我想自动保存它

请帮助我理解这一点。谢谢大家。

通过创建ModelAdmin类,从Django Admin创建
slug
字段,如下所示

# admin.py

class ArticleAdmin(admin.ModelAdmin):
    exclude = ('slug',)


admin.site.register(Article, ArticleAdmin)
#admin.py
类ArticleAdmin(admin.ModelAdmin):
排除=('slug',)

admin.site.register(Article,ArticleAdmin)
因此,设置
null=True
并添加
blank=True

slug = models.SlugField(null=True, blank=True, unique=True)

SlugField
上从Django AdminSet
null=True
隐藏
slug
字段,由于您重写了
save()
方法,slug应该会自动保存。在另一个资源中,我看到在名为utils.py的主项目文件夹中编写了另一个python文件。它做什么?设置null=True后问题未解决。它显示为必填字段。请尝试包括
blank=True
alsoww!因此,对于slug字段,null为false。所以默认情况下它是必填字段。那么,在我将其排除到admin.py之后会发生什么呢?仅对当前字段进行表单验证,如果您排除了字段,则验证检查也排除了其他我想问您的问题。。。。我在一些参考资料中看到,他们在settings.py文件旁边创建了一个python文件,名为utils.py,用于生成Slug。使用它有什么好处。按照我的做法,这是一个好方法还是有其他选择?@ApAnik,我认为最好不要使用utils.py,如果你的slug代码很短的话。或者,您可以使用AutoSlug并获得干净的代码,而不必担心唯一性