Python 在Django中使用过滤器计算字段

Python 在Django中使用过滤器计算字段,python,django,Python,Django,我对Django非常陌生,对python和编程也有点陌生,所以我可能会问一个愚蠢的问题。我正在努力追踪工作中库存的药物。这是我的保险箱存货模型 class Safe(models.Model): user = models.ForeignKey(User, on_delete=models.PROTECT) date_created = models.DateTimeField(auto_now=True) drug_name = models.ForeignKey('c

我对Django非常陌生,对python和编程也有点陌生,所以我可能会问一个愚蠢的问题。我正在努力追踪工作中库存的药物。这是我的保险箱存货模型

class Safe(models.Model):
    user = models.ForeignKey(User, on_delete=models.PROTECT)
    date_created = models.DateTimeField(auto_now=True)
    drug_name = models.ForeignKey('components.Drug', related_name='drug_remove', on_delete=models.PROTECT, default=0)
    amount_removed = models.IntegerField(blank=True, null=True)
    amount_added = models.IntegerField(blank=True, null=True)
    incident_number = models.CharField(max_length=20, default=0, blank=True)
    patient_name = models.CharField(max_length=20, default=0, blank=True)
    medic_unit = models.ForeignKey('components.MedicUnit', related_name='medic_unit', on_delete=models.PROTECT, blank=True)
    free_text = models.CharField(max_length=1000, default=0, blank =True)
    drug_total = computed_property.ComputedIntegerField(compute_from='add_drug')

我想在数据库中存储每种药物的总用药量。我通过研究了解到,在大多数情况下,存储总计并不是最佳做法,但我相信这是一个例外。显然,计算出的整数域不是答案,但我的任何研究都没有让我更接近答案。我的猜测是,我首先需要按“drug_name”进行过滤,然后在我的模型中的一个函数中从之前的总数中计算添加或减去的药物。提前感谢您的帮助。

我可能得到了您所需要的错误信息。但在我看来,你只需要计算
药物总量+添加的药物-删除的药物
对吗? 将其添加到模型底部:

def get_current_amount_of_drug(self):
    return self.drug_total - self.drug_removed + self.drug_added

然后从任何你需要它的地方或任何视图-你可以打电话

safe = Safe.objects.filter(drug_name="My Drug").first() # or however you filter them and then just get
safe.get_current_amount_of_drug()
也许文档会对您有更多帮助:

我可能错误地得到了你需要的东西。但在我看来,你只需要计算
药物总量+药物添加量-药物移除量
对吗?非常感谢。我现在遇到的问题是,我使用Safe.objects.filter()函数得到了一个“ValueError:invalid literal for int(),以10为基数:‘10mg/1ml’”。我做了一些研究,试图先调用模型,然后调用字段名,但这给了我另一个错误。drug_名称似乎是另一个表的外键。它需要有id或药物对象。所以只需传入过滤器一个药物对象,传入过滤器使药物名称一个药物对象起作用。谢谢