Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于使用外键匹配另一个模型中的数量更新模型中的字段_Python_Django - Fatal编程技术网

Python 基于使用外键匹配另一个模型中的数量更新模型中的字段

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

当第二个模型(带有FK)中的两个量相等时,我尝试更新当前模型中的布尔字段

这是一个一对多的关系,所以我需要检查外键的每个实例的两个量是否相等

我想我正在努力做的事情会奏效,但我不确定该如何写。我现在只在Python/Django中工作了两周

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的顺序和接收量呢?