簡體   English   中英

Django:重寫create()方法和save方法()有什么區別?

[英]Django: What's the difference between overriding the create() method and the save method()?

我想覆蓋一些模型行為,但不確定我應該在哪里做。

如果我理解這一點, create()方法只是save()方法的包裝器。 我已經看到了壓倒性行為的例子......

  1. 在create()方法中
  2. 調用真實的save()方法之前的save()方法中,
  3. 並在調用真實的save()方法后的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM