web-dev-qa-db-ja.com

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( "")

Fでsave()を呼び出す前に検証エラーが発生します。なぜこれが起こるのですか?検証エラーが発生するのは、f.save()を呼び出した後だけでしょうか?

注:カスタム定義のcreateメソッドではなく、objects.create()を使用した場合も同じことが起こります。 Djangoで検証がかなりイライラするようになっているので、どんな助けでも大歓迎です。

33
innospark

create() は自動的に保存されるため、エラーを修正した場合でも、作成する引数がデータベースの要件を満たし、レコードを保存することを確認する必要があります。

23
Burhan Khalid

マネージャーにselfを入れるのを忘れた

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