2017-02-28 30 views
0

我有兩個模型,其中一個使用來自另一個模型的數據來填充它自己的字段。問題是當更新第一個模型時,第二個模型不會更新它自己的字段。我必須進入並實際編輯/保存第二個模型以更新其字段。Django - 使用信號刷新另一個模型的字段

事情是這樣的:

models.py:

class ModelA(models.ModelForm) 
    ... 

class ModelB(models.ModelForm) 
    count_number_of_model_A = models.IntegerField 
    def save(self) 
     self.count_number_of_model_A = ModelA.objects.all().count() 
     super(ModelB, self).save() 

(這是我想要做一個簡化版本)

現在我想現場 「count_number_of_model_A」在ModelB中每更新一次ModelA都會更新。現在,如果我實際修改+保存ModelB,它只會刷新。

我認爲答案是使用信號(也許?)。我試圖設置一個信號,以便ModelB每當在ModelA中創建一個新對象時都會更新。我有以下幾點:

@receiver(post_save, sender=ModelA) 
def update_sends(sender, **kwargs): 
    if kwargs.get('created', False): 
     #some code here to refresh ModelB?? 

的信號是否正常,因爲如果我把類似ModelB.objects.filter(一些過濾器).update(某些領域),這些變化都反映,當我進去創建一個新的ModelA對象。但是整個模型本身沒有更新,而且我所追求的字段(「count_number_of_model_A」)沒有刷新。

任何幫助?

回答

1

只需使用:

for model_b in ModelB.objects.filter(<some_filter>): 
    model_b.save() 

但是你應該知道,這一切拉(過濾)對象Django的,有做他們的東西並將它們保存到數據庫中。這比使用query expressions慢得多。你將有更多的工作來設置它,但它運行得更快 - 特別是當數據庫增長時。

+0

這工作得很好!謝謝!我的數據庫相當小,所以我並不擔心它會放慢速度,但我會考慮嘗試將其切換。謝謝你的幫助! – Josh

相關問題