gpt4 book ai didi

django - 如何自动填充 SlugField 而不是覆盖 save()?

转载 作者:行者123 更新时间:2023-12-04 21:04:15 24 4
gpt4 key购买 nike

你好很棒的人

我想知道是否有办法生成 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 生成 slug 的函数
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。

我有点厌倦了为所有模型复制这个,任何提示都会有所帮助!

先感谢您!

最佳答案

不,在模型级别没有这样的论点。您可以使用 prepopulated_fields 在管理员级别执行此操作:

class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}

在模型级别,您可以编写自定义 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):
...

在这种情况下,您不需要实现 create_slug并覆盖 save在每个模型中。

关于django - 如何自动填充 SlugField 而不是覆盖 save()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50615561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com