38

我正在尝试对模型执行一些自定义验证,但我很困惑。让我具体一点。假设我的代码如下:

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)

现在,当我从 shell 使用这个模型时,如果我调用:

f = Foo.objects.create_foo("")

在我有机会在 f 上调用 save() 之前,它会引发验证错误。为什么会这样?不应该只在我调用 f.save() 后才引发验证错误吗?

注意:如果我使用 objects.create() 而不是自定义定义的 create 方法,也会发生同样的事情。任何帮助将不胜感激,因为我发现 django 中的验证相当令人沮丧。

4

2 回答 2

34

create()将自动保存,因此即使您修复了错误 - 您仍然必须确保创建的参数满足数据库要求以保存记录。

于 2013-03-31T05:43:25.530 回答
0

你忘了把self你的经理

class FooManager(models.Manager):
    def create_foo(self, name):
        return self.create(foo_name = name)
于 2013-03-31T05:36:15.517 回答