【发布时间】:2018-09-13 10:03:18
【问题描述】:
我正在构建一个视图,让我可以同时更新多个对象的多个字段。我正在使用 ModelFormSet 和 modelformset_factory 进行此操作。
模板将是一个表格,其对象名称位于字段左侧(见下图)。
我找到了this 示例,但我一直坚持如何实现基于类的视图和模板。
我的表单集
class BaseFormSet(BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(BaseFormSet, self).__init__(*args, **kwargs)
self.queryset = Reference.objects.filter(
start__isnull=True)
ReferenceFormSet = modelformset_factory(
Reference,
fields=('start', 'end'),
formset=BaseFormSet,
extra=0)
我的观点
class ReferenceFormSetView(LoginRequiredMixin, SuperuserRequiredMixin, FormView):
model = Reference
form_class = ReferenceFormSet
template_name = "references/references_form.html"
def form_valid(self, form):
for sub_form in form:
if sub_form.has_changed():
sub_form.save()
return super(ReferenceFormSetView, self).form_valid(form)
我的模板
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<h1>{{ headline }}</h1>
<div class="row">
<form action="" method="post">
{% crispy form %}
<div class="">
<input type="submit" value="Submit" />
</div>
</form>
</div>
</div>
{% endblock content %}
问题
- 该视图与 form_class 中的 Formset 看起来有些奇怪。有没有更好的方法来处理这个?
- 如何访问要在表单中显示的实例名称?
【问题讨论】:
标签: django django-forms django-views formset