你好真棒的人
我想知道是否有一种方法来生成slug,而不是覆盖save()我的模型的方法.
以下是我以前的做法:
def save(self, *args, **kwargs):
if self.pk is None:
self.slug = create_slug(self)
super(ModelName, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
create_slug 是一个生成slug的函数 slugify
def create_slug(instance,new_slug=None,field="name"):
''' long stuff to ensure the slug is unique '''
return slug
Run Code Online (Sandbox Code Playgroud)
由于django可以通过自动填充slug字段在Django Admin中执行.我们可以简单地添加一个额外的参数models.SlugField(field='name').通过添加这个参数,django将确保field = name在保存之前获取值以生成slug而不总是save()通过复制/粘贴大量代码来覆盖该方法,以便为我们拥有的每个模型生成一个slug.
我有点厌倦了为所有型号复制这个,任何提示都会有所帮助!
先感谢您!
不,在模型级别上没有这样的争论。您可以使用以下命令在管理员级别上执行此操作prepopulated_fields:
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
Run Code Online (Sandbox Code Playgroud)
在模型级别,您可以编写自定义 mixin 类并将其用作所有模型的父级:
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):
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您不需要在每个模型中实现create_slug和重写save。
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |