Django :在泛型中操作数据.列表视图



我想知道是否可以对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",那么这些也可以进入模板过滤器。这简化了模板,并使显示逻辑保持在视图之外。

最新更新