Python Django:What';重写create()方法和save()方法之间的区别是什么?
我想覆盖一些模型行为,但不确定应该在哪里执行 如果我理解正确,那么Python Django:What';重写create()方法和save()方法之间的区别是什么?,python,django,django-models,Python,Django,Django Models,我想覆盖一些模型行为,但不确定应该在哪里执行 如果我理解正确,那么create()方法只是save()方法的包装。我见过一些凌驾于行为之上的例子 , 在调用real save()方法之前 调用real save()方法之后 有什么区别 类博客(models.Model): name=models.CharField(最大长度=100) tagline=models.TextField() @类方法 def创建(cls,名称): blog=cls(name=name) #在您的示例中(来自Dja
create()
方法只是save()
方法的包装。我见过一些凌驾于行为之上的例子
类博客(models.Model):
name=models.CharField(最大长度=100)
tagline=models.TextField()
@类方法
def创建(cls,名称):
blog=cls(name=name)
#在您的示例中(来自Django文档),不重写create()。模型类中没有这样的方法
ModelManager(查询)中有一个创建方法:
在overrideen save方法中,只有在调用super().save()之前更改了对象,更改才会被保存。在super().save()之后,主要是关于反馈。但如果在此处引发异常,则将回滚保存。此外,您可能希望从super().save()捕获异常并对其进行处理 模型上有save
方法,但是create
方法是为您创建对象的默认管理器,它执行一些验证,然后调用save方法。
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
@classmethod
def create(cls, name):
blog = cls(name=name)
# do something <-- 1!
return blog
def save(self, *args, **kwargs):
# do_something <-- 2!
super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
# do_something_else <-- 3!