在Django中获取模型表单集中的数据

在Django中获取模型表单集中的数据,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我在Django有一套表格 我在模板中将此表单集打印为 {% for form in formset %} {{ form.name }} {% endfor %} 表单集由queryset作为表单和一些额外表单组成。但是我需要来自queryset的一些字段值,这些值不会显示为表单。这怎么可能?它是一个查询集,与预取相关,因此字段实际上不在模型中,而是加入到我的查询集中 我的模特是 class Person: name = CharField(max_length=200)

我在Django有一套表格

我在模板中将此表单集打印为

{% for form in formset %}
    {{ form.name }}
{% endfor %}
表单集由queryset作为表单和一些额外表单组成。但是我需要来自queryset的一些字段值,这些值不会显示为表单。这怎么可能?它是一个查询集,与预取相关,因此字段实际上不在模型中,而是加入到我的查询集中

我的模特是

class Person:
    name = CharField(max_length=200)

class Grade:
    person = ForeignKey(Person)
    grade = IntegerField()
我的查询集是
Person.objects.prefetch\u related('grade\u 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 %}

现在我的表单集只包含表单,但是我需要一个对象列表,并从这个对象列表中创建一些表单。我可以通过创建表单、使用字段名和输入名来做一些小的改动,完全避免Django创建表单的方式,但我认为这会很愚蠢。必须有其他方法。

是的,这是可以使用的


使用后,将在Queryset缓存中找到每个
人的
等级集
,并且不需要再次点击数据库

请包括您所指的型号和表格;当引用的内容如此抽象时,很难判断它。另外,当您说“我需要来自queryset的一些字段值”时,您的意思是在处理提交表单的视图中需要它们吗?或者在模板中?我已经更新了我的问题,这很好。问题是我使用了django额外视图中的
UpdateWithInlinesView
,我不知道如何更改
get\u context\u data
中的inlines变量。你能帮我吗?我已经查看了for hours的代码,我尝试了许多不同的方法,但是我得到了错误
zip参数#2必须支持迭代
kwargs['obj_和_formset']=zip(queryset,self.get_formset_class())
formset=zip(queryset,inlineformset_工厂(self.model,self.get_inline_model()),**self.get_factory_kwargs())
@Jamgreen不幸的是,这与您发布的问题完全不同,我对
django额外视图库不熟悉。您也没有显示任何相关代码。您可能想打开一个新问题。@Jamgreen-zip参数#2是一个支持迭代的表单集。您确定没有向它传递
modelformset\u factory
的实例吗?我编辑了
construct\u formset()
以返回
返回zip(queryset,formset.forms)
,现在它可以工作了。谢谢!:-)
# somewhere in views.py...
people = Person.objects.prefetch_related('grade_set')
formset = # ...(create your modelformset)...
people_and_formset = zip(people, formset)

# somewhere in template.html...
{% for person, form in people_and_formset %}
    {{ person.id }}
    {{ form.name }}
    {{ person.grade_set.all|running_total }}
{% endfor %}