[英]Django Queryset same template for different views
我在 view.py 中有两个视图函数
def function1(request):
qset = Table1.objects.values(
'Field1__code',
'Field2__descr',
'Field3__nr',
...
)
return render(request, 'template.html', {'qset':qset})
def function2(request):
qset = Table2.objects.values(
'Field4__abc',
'Field5__def',
'Field6__fgh',
...
)
return render(request, 'template.html', {'qset':qset})
我想对两个视图使用相同的 template.html。 如何从内容 {'qset':qset} 中的两个函数发送到模板相同的键名,如“x1”、“x2”、“x3”(或 qset.x1、qset.x2、qset.x3)而不是发送两组不同的密钥? template.html 包含键“x1”、“x2”、“x3”。 谢谢
我可以快速想到三个选项。
首先,您使用.values_list
并使用位置索引而不是键。 所以在你的问题中,你要求qset.x1, ...
。 你会使用qset.0, qset.1
代替。 然而,这很难维持。
其次,您可以注释查询集以定义字段:
Table2.objects.annotate(
x1=F('Field4__abc'),
x2=F('Field5__def'),
...
).values('x1', 'x2', ...)
第三,您可以创建一个虚拟视图模型来将模型实例转换为它。
class ViewModel:
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
def function2(request):
table2s = Table2.objects.all()
data = [
ViewModel(x1=obj.Field4.abc, x2=Field5.def, ...)
for obj in table2s
]
return render(request, 'template.html', {'data':data})
字段的数量和逻辑的复杂性将决定哪个最适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.