在django中调用create时是否隐式调用save()?

inn*_*ark 32 django django-models django-validation

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

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)
Run Code Online (Sandbox Code Playgroud)

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

f = Foo.objects.create_foo("")

在我有机会在f上调用save()之前,它会引发验证错误.为什么会这样?一旦调用f.save(),是否应该仅提出验证错误?

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

Bur*_*lid 24

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

  • 这就是重点,你不需要调用`save()`因为`create()`是创建实例的快捷方式,然后自动保存. (6认同)
  • 为什么创建后会自动保存?在文档中,它说了以下内容:“请注意,实例化模型绝不会触及您的数据库;为此,您需要 save()。” 如果create()会自动保存,那么调用save()还有什么意义呢? (3认同)

cat*_*ine 0

您忘记添加self您的经理

class FooManager(models.Manager):
    def create_foo(self, name):
        return self.create(foo_name = name)
Run Code Online (Sandbox Code Playgroud)