2017-01-31 5 views
0

私はちょうどそれがどのようにこのモデル "save"メソッドを動作するか尋ねたいですか? 私はこのコードを私のコードに追加しようとしていますが、実際の動作は分かりません。 これらの行は、theresがモデル内のidでない場合にslugifyを保存するのに役立ちますか? ありがとうございます。Djangoモデルオプション保存

class Category(models.Model): 

    name = models.CharField(max_length=50) 
    slug = models.SlugField(editable=False) 

    def save(self, *args, **kwargs): 
     if not self.id: 
      self.slug = slugify(self.name) 
     super(Category, self).save(*args, **kwargs) 

    def __unicode__(self): 
     return self.name 

答えて

1

短い答え:これは新しいオブジェクトにslugを追加するのに役立ちます。

if not self.id: 

これはself.idが空の場合にのみ、Trueを返します。オブジェクトが新規の場合は、この検証を行い確認するには

idがプライマリキーであると考えると、新しいオブジェクトに対してのみ可能です。 allow_unicodeがFalse(デフォルト)の場合

がASCIIに変換します。

self.slug = slugify(self.name) 

は今、あなたは slugify utilのを使用してスラグに nameフィールドを変換します。スペースをハイフンに変換します。英数字、アンダースコア、ハイフン以外の文字を削除します。小文字に変換します。先頭と末尾の空白も削除します。例えば

slugify(値)

値が "ジョエルはスラグである" である場合、出力は "ジョエルは-スラグである" であろう。

そして最後に、あなたは、オブジェクトを保存するために

super(Category, self).save(*args, **kwargs) 

を呼び出します。

+0

ベストの説明これまでにありがとうございました@neverwalkaloner – soultaker

+0

モデルでこれを行うには良い習慣ですか? @neverwalkaloner – soultaker

+0

@soultakerあなたは大歓迎です!はい、これは一般的な方法です。 – neverwalkaloner

関連する問題