Django:模型上的数学

Django:模型上的数学,django,django-models,Django,Django Models,我需要对一个值做一些数学运算,我对F()非常困惑。我已经通读了文档并搜索了一些例子,但我缺少一些基本知识。你能提供一个解决方案并给出一些关于如何理解这一点的建议吗?我下面的尝试被注释掉了。我只是想把Mb转换成GB。如果我能得到一个2位小数,那将是非常棒的 class DatastoreInfo(models.Model): [ ... ] total_capacity = models.IntegerField(db_column='Total_Capacity', blank=

我需要对一个值做一些数学运算,我对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})

你快到了。您需要组织查询,以便首先筛选到适用的行,然后应用更新,并使用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)
你可以看到,这就像是记者的例子


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

谢谢。我现在可以得到一个没有错误的计算结果。但是,我发现每次刷新(发布)页面时,都会根据最后一个值执行计算,并将其写入数据库。为了避免重复计算,我在
if request.method==“POST”
def ecsdatastores(request)
下都尝试过将结果写入数据库,我可能忽略了一些基本的东西,但我不知道这可能是什么。诀窍是,与其在帖子上显示200条回复中的结果,实际上你有一个单独的视图来显示结果,然后使用HttpResponseDirect(302,而不是301)将用户放在结果页面上,他们可以随时刷新,而无需重做帖子。您可能也想考虑使用FraveVIEW来进一步简化代码。
reporter = Reporters.objects.filter(name='Tintin')
reporter.update(stories_filed=F('stories_filed') + 1)