我想知道是否可以对ListView的每条记录应用规则示例:从模型中获取一个以克为单位的值,如果克值> 1000,则创建一个包含公斤值的新变量
我已经尝试过get_object但它仅适用于视图详细信息
提前感谢您的帮助:)
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
另一种方法是编写一个将克转换为千克的自定义筛选器。
然后,在您的模板中,而不是编写
{{ object.M_KG }}
你会做的
{{ object.M_G|to_kg }}
如果您有更多自定义逻辑,例如"如果 g> 1000,则显示 KG,否则显示 g",那么这些也可以进入模板过滤器。这简化了模板,并使显示逻辑保持在视图之外。