[英]Calculating fields with filters in Django
我对 Django 和 python 和一般编程有点陌生,所以我可能会问一个愚蠢的问题。 我正在尝试跟踪我们工作中库存中的药物。 这是我的 model 用于我们保险箱中的库存
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')
我想将每种药物的药物总数存储在数据库中。 我从研究中了解到,在大多数情况下,存储总计并不是最佳实践,但我相信这是一个例外。 显然,计算出来的 integer 字段不是答案,但我的研究都没有让我更接近答案。 我的猜测是,我首先需要按“drug_name”过滤,然后在我的 model 中的 function 中计算先前总数中添加或减去的药物。 提前感谢您的帮助。
我可能弄错了你需要的东西。 但在我看来,您只需要计算drug_total + drug_added - drug_removed
是否正确? 将此添加到 model 的底部:
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()
也许文档会为您提供更多帮助: https://docs.djangoproject.com/en/2.2/topics/db/models/#model-methods
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.