在Django中获取模型表单集中的数据
我在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)
{% 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 %}