gpt4 book ai didi

python - Django ListView 将变量设置为模型实例元素

转载 作者:行者123 更新时间:2023-12-01 01:53:11 24 4
gpt4 key购买 nike

在 ListView 的 views.py 类中,我尝试添加一个公式,该公式使用 get_context_data() 方法中的对象中的特定元素。这是我尝试过的。

模型.py

Class MyModel(models.Model):
foo = models.FloatField()
bar = models.FloatField()

View .py

class MyView(generic.ListView):

template_name = "my_item_list.html"
model = MyModel

def get_context_data(self, **kwargs):

obj = MyModel.objects.get(pk=this_object_id)

var_a = obj['foo']
var_b = obj['bar']
result = var_a * var_b

context = {
'result': result,
}

return context

这会引发对象不支持索引错误。我尝试了几种不同的方法来访问特定的对象元素,但没有成功。我不想注释(这是绝大多数的 SO 问答),只是使用指定对象字段中的值。

作为旁注,如果我将 obj 传递到上下文数据中,我可以轻松迭代到模板中的元素值 - 所以我知道 .get() 方法工作正常 - 这只是我无法开始工作的 View 中的“简单”数学。

我确实找到了this (model_to_dict()),但它正在将 obj 转换为字典 - 我认为这可以工作,但似乎比我预期的更冗长。

最佳答案

你应该使用属性,对象是模型类的实例而不是字典

    var_a = obj.foo
var_b = obj.bar
result = var_a * var_b

最好是在模型的声明中创建属性:

Class MyModel(models.Model):
foo = models.FloatField()
bar = models.FloatField()

@property
def multiply_fb(self):
return self.foo * self.bar

在 View 中:

class MyView(generic.ListView):

template_name = "my_item_list.html"
model = MyModel

def get_context_data(self, **kwargs):

obj = MyModel.objects.get(pk=this_object_id)
context = {
'result': obj.multiply_fb,
}
return context

关于python - Django ListView 将变量设置为模型实例元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50523484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com