1

保存Django的模型时,X的正确方法是什么?让我试着解释一下。:)

例如,我有负责博客文章的模型。如果尚未设置,我想使用标题字段生成 slug 字段。它应该在模型保存之前发生。这就是我目前实现它的方式。

def save(self, *args, **kwargs):
    if self.slug == '':
        self.slug = slugify(self.title)
    super(Article, self).save(*args, **kwargs)

还有其他方法吗?还有其他方法比这更好吗,怎么样?

感谢任何建议!

4

3 回答 3

2

最合适的方法是覆盖clean模型的方法:

from django.template import defaultfilters

class Article(models.Model):
    ...
    def clean(self):
        if self.slug.strip() == '':
            self.slug = defaultfilters.slugify(self.title)

        super(Article, self).clean()

此方法将在模型保存之前调用,并且在任何唯一性检查完成之前,所以如果有问题,它仍然会被捕获。

您可以在此处阅读有关模型的 clean 方法

于 2012-07-09T19:31:19.903 回答
1

我会将其构建到输入表单中并使用 ModelAdmin 或 ModelForm。

管理表格:

from django.contrib import admin

class ArticleAdmin(admin.ModelAdmin):

    prepopulated_fields = {'slug': ('title', )}

模型形式:

class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article

    def clean_slug(self):
       if !self.cleaned_data['slug'] :
           self.cleaned_data['slug'] = slugify(self.title)
       return True

再次在那个 clean_slug 中,您可能想先检查它是否是唯一的……如果不是,则将 slug 修改为唯一的。

于 2012-07-09T18:17:21.137 回答
0

您也可以使用信号。使用 django 自带的 post save 信号。 https://docs.djangoproject.com/en/dev/topics/signals/

于 2012-07-09T20:46:56.980 回答