Hello Awesome People
我想知道是否有办法生成slug,而不是覆盖模型的save()
方法。
以下是我以前的做法:
def save(self, *args, **kwargs):
if self.pk is None:
self.slug = create_slug(self)
super(ModelName, self).save(*args, **kwargs)
create_slug
是一个使用slugify
def create_slug(instance,new_slug=None,field="name"):
''' long stuff to ensure the slug is unique '''
return slug
正如django可以通过自动填充slug字段在Django Admin中完成。我们可以简单地添加
另一个参数models.SlugField(field='name')
。通过添加此参数,django将确保在保存之前获取field = name
的值以生成slug而不总是通过复制/粘贴大量代码覆盖save()
方法来为每个模型生成一个slug我们有。
我有点厌倦了为所有型号复制这个,任何提示都会有所帮助!
提前谢谢!
答案 0 :(得分:2)
不,模型级别没有这样的论点。您可以使用prepopulated_fields
在管理员级别执行此操作:
ObjectContent
在模型级别,您可以编写自定义mixin类,并将其用作所有模型的父级:
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
在这种情况下,您无需在每个模型中实施class SlugMixin:
def create_slug(instance,new_slug=None,field="name"):
''' long stuff to ensure the slug is unique '''
return slug
def save(self, *args, **kwargs):
if self.pk is None:
self.slug = create_slug(self)
super().save(*args, **kwargs)
class SomeModel(SlugMixin, models.Model):
...
class OtherModel(SlugMixin, models.Model):
...
并覆盖create_slug
。