得到了Django 1.11應用程序。一切工作正常,除了pre_save信號的一個奇怪的問題。在我的模型中,我有兩個用於計算所討論模型(帶寬和許可證)的總成本的多對多領域。Django pre_save信號必須從管理員保存兩次才能生效
我創建了一個pre_save信號來完成這個任務,它可以工作,但是從管理員我不得不點擊兩次「保存」選項來更正Sku費用。
下面的代碼片段。感謝您的期待。
注意:我試着把它作爲一個保存重寫,結果是一樣的,所以不知道它是Django admin還是我正在做的事情。
class Sku(models.Model):
name = models.CharField(max_length=50)
bandwidth = models.ManyToManyField(Bandwidth, blank=True, null=True)
license = models.ManyToManyField(License, blank=True, null=True)
customer = models.ForeignKey(Customer, null=True, blank=True, related_name='sku')
cost = models.DecimalField(max_digits=25, decimal_places=2, default=0.00)
def list_bandwidth(self):
return ', '.join([ b.vendor for b in self.bandwidth.all()[:3]])
def list_license(self):
return ', '.join([ b.name for b in self.license.all()[:3]])
def __unicode__(self):
return self.name
def sku_receiver_function(sender, instance, *args, **kwargs):
if instance.id:
bandwidth_cost = 0
license_cost = 0
if instance.bandwidth:
for b in instance.bandwidth.all():
bandwidth_cost = float(b.cost) + bandwidth_cost
if instance.license:
for l in instance.license.all():
license_cost = float(l.cost) + license_cost
instance.cost = bandwidth_cost + license_cost
pre_save.connect(sku_receiver_function, sender=Sku)
在admin中進行一次保存後是否檢查了django shell,並且如果值更新正確(使用shell時)? – Algorithmatic
我做到了,是的。在邏輯中和之後放置一個打印,點擊保存時會打印舊值。 – dhwillie