将Django数据库中的两个字段相乘

2024-09-22 14:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手,我已经尝试了一段时间了

models.py

class Majitele(models.Model):
    cena_p = models.DecimalField(decimal_places=2, max_digits=10, null=True)
    cena_l = models.DecimalField(decimal_places=2, max_digits=10, null=True)
    lv = models.IntegerField(null=True)
    katastr = models.CharField(max_length=40, null=True)
    jmeno = models.CharField(max_length=40, null=True)
    ulice = models.CharField(max_length=30, null=True)
    mesto = models.CharField(max_length=30, null=True)
    psc = models.IntegerField(null=True)
    v_pole = models.DecimalField(decimal_places=4, max_digits=10, null=True)
    v_les =  models.DecimalField(decimal_places=4, max_digits=10, null=True)
    v_celkem = models.DecimalField(decimal_places=4, max_digits=10, null=True)
    cena_pole = models.DecimalField(decimal_places=4, max_digits=10, null=True)
    cena_les = models.DecimalField(decimal_places=4, max_digits=10, null=True)
    cena_rok = models.DecimalField(decimal_places=4, max_digits=10, null=True)
    nevyplaceno = models.IntegerField(null=True)
    podil = models.CharField(max_length=5, null=True)
    hlasu = models.IntegerField(null=True)
    poznamka = models.CharField(max_length=200, null=True)
    prezence = models.BooleanField(null=True)
    vyplatni = models.BooleanField(null=True)
    postou = models.BooleanField(null=True)
    osobne = models.BooleanField(null=True)

    def __str__(self):
        return '%s'%(self.jmeno)

以下是我想做的事情: 取v_极值,然后取cena_p值,将它们相乘,结果应保存在cena_极字段中

我试过这个:

Majitele.objects.all().annotate(vypocet_c=F('cena_p') * F('v_pole')).update(cena_pole=vypocet_c)

有没有办法做到这一点? 谢谢你的建议


Tags: truemodelsnulllengthmaxdecimalcharfieldplaces
1条回答
网友
1楼 · 发布于 2024-09-22 14:32:13

是的,您可以使用以下内容更新:

from django.db.models import F

Majitele.objects.all().update(cena_pole=F('cena_p') * F('v_pole'))

也就是说,如果cena_pole始终是cena_pv_pole的乘积,那么最好删除此字段,并使用注释(例如在管理器中)进行过滤、计算等

相关问题 更多 >