【问题标题】:Django Saving Calculated Value to ModelDjango 将计算值保存到模型
【发布时间】:2020-04-13 11:36:13
【问题描述】:

:)

我是 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()

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

提前致谢。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

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

    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]
    )

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多