我在Django中有一个formset .
我在模板中打印此formset为
{% for form in formset %}
{{ form.name }}
{% endfor %}
formset由作为表单的查询集和一些额外的表单组成 . 但我需要查询集中的一些字段值,我不会将其显示为表单 . 这怎么可能?它是一个带有 prefetch_related
的查询集,因此字段实际上不在模型中,而是在我的查询集中连接 .
我的模特是
class Person:
name = CharField(max_length=200)
class Grade:
person = ForeignKey(Person)
grade = IntegerField()
我的查询集是 Person.objects.prefetch_related('grade_set')
.
我的模板是
{% for form in formset %}
Object id: {{ obj.id }}
{{ form.name }}
{{ obj.grade_set.all|running_total }}
{% endfor %}
我知道 obj
没有定义,但我认为可能在模板中做这样的事情:
{% for obj, form in object_formset %}
Object id: {{ obj.id }}
{{ form.name }}
{{ obj.grade_set.all|running_total }}
{% endfor %}
现在我的formset只包含表单,但我更需要一个对象列表,并从这个对象列表中创建一些表单 . 我可以通过创建表单并使用字段名称和输入名称来完成一个小小的黑客,并完全避免Django创建表单的方式,但我认为这将是愚蠢的 . 必须有其他方式 .
1 回答
是的,这可以使用zip .
使用prefetch_related后,每个
Person
的grade_set
将在Queryset缓存中找到,并且不需要再次命中数据库 .