首页 > 解决方案 > Django:模型上的数学

问题描述

我需要对一个值做一些数学运算,我对 F() 感到非常困惑。我已经阅读了文档并搜索了示例,但我缺少一些基础知识。您能否提供解决方案并提供一些有关如何理解这一点的指示?我在下面的尝试被注释掉了。我只是想将 Mb 转换为 GB。如果我能得到 2 个十进制值,那就太好了。

class DatastoreInfo(models.Model):
    [ ... ]
    total_capacity = models.IntegerField(db_column='Total_Capacity', blank=True, null=True)
    [ ... ]
    class Meta:
        managed = False
        db_table = 'Datastore_Info'


def ecsdatastores(request):
    form = myForm()
    results = {}
    if request.method == 'POST':
         if 'listxyz' in request.POST:
             form = myForm(request.POST)
             taf = form['taf'].value()
             results = DatastoreInfo.objects.filter(f_hostname=c_name)
             # results = DatastoreInfo.objects.filter(f_hostname=c_name, total_capacity=F('total_capacity') / 1000)
             # results = DatastoreInfo.objects.update(total_capacity=F('total_capacity') / 1000).filter(f_hostname=c_name)
    return render(request, 'dpre/datastoreinfo.html', {'form': form , 'results': results})

标签: djangodjango-models

解决方案


你几乎在那里。您需要组织查询,因此首先过滤到适用的行,然后使用 F 函数作为值应用更新。

# First take your filtered rows
results = DatastoreInfo.objects.filter(f_hostname=c_name)

# Then, on the filtered queryset, you can apply the update.
results.update(total_capacity=F('total_capacity') / 1000)

您可以看到这就像Django F 表达式文档中的记者示例一样。

reporter = Reporters.objects.filter(name='Tintin')
reporter.update(stories_filed=F('stories_filed') + 1)

编辑:作为旁注,如果从 GB 转换为 MB,您可能需要除以 1024,而不是 1000。


推荐阅读