首页 > 解决方案 > Django 将计算值保存到模型

问题描述

:)

我是 Django 初学者,我想向你们这些漂亮的人寻求帮助。

这是我要完成的工作:

我有一个模型 - 如下所示 - 我想为每个符号包含一个分数。

class Stock_Score(models.Model):

    Symbol = models.CharField(max_length=20, null=True)
    Score = models.FloatField(null=True)

为了计算该分数,我想使用第二个模型,其中包含一个股票列表和一个名为 Yrs 的每个符号的值:

class Stock_Data(models.Model):

    Symbol = models.CharField(max_length=20, null=True)
    Yrs = models.FloatField(null=True)

所以我想的是在我的views.py中导入Stock_Data模型,循环遍历符号,检查一个简单的if/else,然后将结果保存到我的第一个模型中的“分数”字段下。

像这样的东西:

data = Stock_Data.objects.all()

for i in data:
      if i.Yrs > 10:
        Score = 1
      else:
        Score = 0

    Score.save()

为这个垃圾代码道歉,但我很想知道我将如何做到这一点:)

提前致谢。

标签: pythondjangodjango-models

解决方案


您可以使用以下方法计算大于 10的Stock_Data对象数:Yrs

from django.db.models import Count, Q

qs = Stock_Data.object.values('Symbol').annotate(
    nYgt10=Count('Yrs', filter=Q(Yrs__gt=10))
).order_by('Symbol')

接下来我们可以制作Stock_Score对象并将它们保存到数据库中:

Stock_Score.objects.bulk_create(
    [Stock_Score(Symbol=row['Symbol'], Score=row['nYgt10']) for row in qs]
)

推荐阅读