Django:在通用.ListVi

2024-10-04 03:28:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以对ListView的每个记录应用一个规则 示例:从模型中获取一个以克为单位的值,并创建一个包含kg值的新变量,如果该值大于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

Tags: andthename模型self示例getif
1条回答
网友
1楼 · 发布于 2024-10-04 03:28:31

您可以重写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,将克转换为千克。在

然后,在你的模板中,而不是写

^{pr2}$

你会的

{{ object.M_G|to_kg }}

如果您有更多的自定义逻辑,如“display KG If g>;1000,否则显示g”,那么这些都可以进入模板过滤器。这简化了模板,并将显示逻辑排除在视图之外。在

相关问题 更多 >