Python 基于使用外键匹配另一个模型中的数量更新模型中的字段
当第二个模型(带有FK)中的两个量相等时,我尝试更新当前模型中的布尔字段 这是一个一对多的关系,所以我需要检查外键的每个实例的两个量是否相等 我想我正在努力做的事情会奏效,但我不确定该如何写。我现在只在Python/Django中工作了两周Python 基于使用外键匹配另一个模型中的数量更新模型中的字段,python,django,Python,Django,当第二个模型(带有FK)中的两个量相等时,我尝试更新当前模型中的布尔字段 这是一个一对多的关系,所以我需要检查外键的每个实例的两个量是否相等 我想我正在努力做的事情会奏效,但我不确定该如何写。我现在只在Python/Django中工作了两周 class ModelA(): model_number = models.CharField(max_length=100) is_true = models.BooleanField(default=False) def update_is
class ModelA():
model_number = models.CharField(max_length=100)
is_true = models.BooleanField(default=False)
def update_is_true(self, *args, **kwargs):
disting_model = ModelB.objects.filter(
model_number=self.model_number
)
pod = self.modelb_set.all()
ordered = sum([p.ordered for p in pod])
received = sum([p.qty_received for p in pod])
if received >= ordered:
self.is_true = True
self.save()
"""
get a count for every instance of (ordered != received)
for each model_number. If count = 0, set (is_true = True)
"""
class ModelB():
model_number = models.ForeignKey(ModelA), on_delete=models.PROTECT)
ordered = models.IntegerField(default=0)
received = models.IntegerField(default=0)
这是我的数据库结构
ModelA
id model_number is_true
1 1 False
ModelB
id modelA_id ordered received
1 1 15 15
2 1 25 25
在你想做的工作中最好使用信号。问题是什么?如果代码起作用,它就起作用。此代码的语法无效,因为有一个悬空的
if
子句。我建议你读一下有关的文档。ModelA将有一个model\u b\u set
属性,该属性与ModelB.model\u number
相反,因此无需进行过滤。如果为真
应始终反映已排序的和已接收的的状态(即,您永远不会手动覆盖它),我会将其作为一种方法(或属性)只有在出现性能问题时才将其转换为模型字段。我已经更新了我的代码,上面的代码似乎以我不希望的方式工作。现在我只需要触发该方法。如何在modelB中重载save并增加self.modelA的命令和接收?最好使用信号来完成您试图完成的工作?问题是什么?如果代码起作用,它就起作用。此代码的语法无效,因为有一个悬空的if
子句。我建议你读一下有关的文档。ModelA将有一个model\u b\u set
属性,该属性与ModelB.model\u number
相反,因此无需进行过滤。如果为真
应始终反映已排序的和已接收的的状态(即,您永远不会手动覆盖它),我会将其作为一种方法(或属性)只有在出现性能问题时才将其转换为模型字段。我已经更新了我的代码,上面的代码似乎以我不希望的方式工作。现在我只需要触发这个方法,那么在modelB中重载save并增加self.modelA的顺序和接收量呢?