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慢得多。你将有更多的工作来设置它,但它运行得更快 - 特别是当数据库增长时。
这工作得很好!谢谢!我的数据库相当小,所以我并不担心它会放慢速度,但我会考虑尝试将其切换。谢谢你的帮助! – Josh