我有两个模型,其中一个使用其他模型的数据来填充自己的字段。问题是当第一个模型更新时,第二个模型也不会更新自己的字段。我必须进入并实际编辑/保存第二个模型,以便更新其字段。
这样的事情:
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时都会更新。现在,只有在我实际修改+ save ModelB时它才会刷新。
我认为答案是使用信号(可能?)。我试图设置一个信号,以便只要在ModelA中创建一个新对象,ModelB就会更新。我有以下内容:
@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")不会刷新。
任何帮助?
答案 0 :(得分:1)
只需使用:
for model_b in ModelB.objects.filter(<some_filter>):
model_b.save()
但是你应该知道,这会将所有(已过滤的)对象拉到Django,它们会对它们执行某些操作并将它们保存回数据库。这比使用query expressions要慢得多。您将需要更多的工作来设置它,但它运行得更快 - 尤其是在数据库增长时。