Django - 使用信号刷新另一个模型的字段

问题描述:

我有两个模型,其中一个使用来自另一个模型的数据来填充它自己的字段。问题是当更新第一个模型时,第二个模型不会更新它自己的字段。我必须进入并实际编辑/保存第二个模型以更新其字段。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”)没有刷新。

任何帮助?

只需使用:

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

但是你应该知道,这一切拉(过滤)对象Django的,有做他们的东西并将它们保存到数据库中。这比使用query expressions慢得多。你将有更多的工作来设置它,但它运行得更快 - 特别是当数据库增长时。

+0

这工作得很好!谢谢!我的数据库相当小,所以我并不担心它会放慢速度,但我会考虑尝试将其切换。谢谢你的帮助! – Josh