我想覆盖一些模型行为,但我不确定应该在哪里做。
如果我理解这一点,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!
答案 0 :(得分:2)
在您的示例中(来自Django文档),create()是而不是覆盖。 Model类中没有这样的方法。
ModelManager中有一个create方法(查询):https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.create
在覆盖保存方法中,只有在调用super()。save()之前更改对象时,才会保存更改。在super()。save()之后,它主要是关于反馈。但如果您在此处引发异常,则会回滚保存。此外,您可能希望从super()。save()捕获异常并对其执行某些操作。