![](/img/trans.png)
[英]django post_signal triggered on 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.