2013-03-31 10 views
22

モデルでカスタム検証を実行しようとしていますが、混乱しています。私は具体的にさせてください。のは、次のように私のコードがあるとしましょう:今すぐdjangoでcreateを呼び出すとsave()が暗黙に呼び出されますか?

class FooManager(models.Manager): 
    def create_foo(self, name): 
    return self.create(foo_name = name) 

class Foo(models.Model): 
    foo_name = models.CharField(max_length=30) 
    objects = FooManager() 

    def clean(self): 
    ... 
    def save(self, *args, **kwargs): 
    self.full_clean() 
    super(User, self).save(*args, **kwargs) 

、私が呼び出した場合、私は、シェルからこのモデルで働いていたとき:

F = Foo.objects.create_foo( 「」)私はチャンスのトンを取得する前に

これは、検証エラーが発生しますo fのsave()を呼び出します。なぜこれが起こるのですか? f.save()を呼び出すと、妥当性検査エラーは発生しませんか?

注:カスタム定義のcreateメソッドではなく、objects.create()を使用すると同じことが起こります。どんな助けも大いに評価されるでしょう、私はかなり長らくイライラしています。あなたは

class FooManager(models.Manager): 
    def create_foo(self, name): 
     return self.create(foo_name = name) 

答えて

0

は自動的に保存されますので、あなたのエラーを修正しても - あなたはまだわから作成するための引数は保存するために、データベースの要件を満たす加える必要があります記録。

+0

いいえ、申し訳ありませんが、私の貧しい例のせいです。私の実際のコードでは、私はマネージャーに自己を置く。私の実際のコードを置くべきでしょうか、それは助けになるのでしょうか? – innospark

16

create()上司にselfを入れるのを忘れ

+0

作成が自動的に保存されるのはなぜですか?ドキュメントでは、次のように書いています: "モデルをインスタンス化してもデータベースに触れることはないので、保存する必要があります()。だから、save()を呼び出すポイントは何ですか?もしcreate()が自動的に保存されたら? – innospark

+2

これは要点ですが、 'create()'はインスタンスを作成して自動的に保存するため、 'save()'を呼び出す必要はありません。 –

+0

オハイオ州、完璧。私はちょうどそれがこれを概説する文書の場所を見つけました、私はもっと努力してみるでしょう!本当にありがとう、あなたは私にかなり時間をかけてくれました。 – innospark