簡體   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