繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM