簡體   English   中英

我需要在Django模型中執行諸如form.save(commit = False)之類的操作

[英]I need to do something like form.save(commit=False) in my model in Django

我有一個模型,該模型在創建ID時需要在另一個字段中包含ID。請參見下文:

id = models.AutoField(primary_key=True)
ticket_number = models.CharField(max_length=200, blank=True)
brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, null=True)

...

def save(self, *args, **kwargs):
    shortname = self.brand.shortname
    super(Job, self).save(*args, **kwargs)
    self.ticket_number = shortname.upper() + '-' + str(self.id)
    super(Job, self).save(*args, **kwargs)

它的工作原理很好,並且創建了唯一的票證編號。 我是Django的新手,但我知道足夠多,所以我覺得兩次保存帖子效率不高。 是否有類似.save(commit = False)的模型? 我只想保存一次。

在創建相應的數據庫行並將其從Django中提取出來之前,您實際上無法真正預先知道self.id是什么。 如果您不打算對列進行過濾,則可以將其轉換為在模型實例上查找時計算出的屬性:

class Thing(db.Model):
    id = models.AutoField(primary_key=True)
    brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, null=True)

    @property
    def ticket_number(self):
        return '{}-{}'.format(self.brand.shortname.upper(), self.id)

您可以使用post_save信號來更新票證編號。 保存模型后將調用post_save信號,因此它將具有一個ID。 雖然,您仍將執行兩次保存,但是您將僅顯式調用一次保存。

發布保存文檔: 此處希望能給您帶來更多的精神安寧=)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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