gpt4 book ai didi

python - Django : Manipulate Data in a generic. ListView

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:54 26 4
gpt4 key购买 nike

我想知道是否可以对 ListView 的每条记录应用规则示例:从模型中获取以克为单位的值,如果克值 > 1000,则创建一个包含千克值的新变量

我尝试过 get_object 但它只适用于 ViewDetail

预先感谢您的帮助:)

class ViewBsin(generic.ListView):
template_name = 'browser/bsin.html'
context_object_name = 'gtin_list'
model = Gtin
...
def get_object(self):
# Call the superclass
object = super(ViewBsin, self).get_object()
# Add new data
if object.M_G and object.M_G >= 1000:
object.M_KG = object.M_G / 1000
if object.M_ML and object.M_ML >= 1000:
object.M_L = object.M_ML / 1000
object.save()
# Return the object
return object

最佳答案

您可以重写get_queryset并循环查询集,更新对象。您不应该调用 save(),因为这会更新数据库,并且 ListView 应该是只读的。

class ViewBsin(generic.ListView):

def get_queryset(self):
queryset = super(ViewBsin, self).get_queryset()
for obj in queryset:
if obj.M_G and obj.M_G >= 1000:
obj.M_KG = obj.M_G / 1000
# Make any other changes to the obj here
# Don't save the obj to the database -- ListView should be read only
return queryset

另一种方法是编写 custom filter将克转换为千克。

然后,在您的模板中,不要编写

{{ object.M_KG }}

你会做

{{ object.M_G|to_kg }}

如果您有更多自定义逻辑,例如“如果 g > 1000,则显示 KG,否则显示 g”,那么这也可以全部放入模板过滤器中。这简化了您的模板,并使显示逻辑保持在 View 之外。

关于python - Django : Manipulate Data in a generic. ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368572/

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