![](/img/trans.png)
[英]What's the difference between these two ways to override the save() method in a Django ModelForm?
[英]Django: What's the difference between overriding the create() method and the save method()?
我想覆蓋一些模型行為,但不確定我應該在哪里做。
如果我理解這一點, 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!
在您的示例中(來自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()捕獲異常並對其執行某些操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.