Django:预填充表单集
Django: prepopulate formset
我有一个表单集,但我不知道如何用数据库中的数据预填充它。
说实话,我有一个模型库和一个具有库外键的模型书。我希望有人能够(一次)编辑一个图书馆中的所有书籍。
html
{{ book_form.management_form }}
{% for form in book_form.forms %}
{{ form.as_p }}
{% endfor %}
views.py
class LibraryUpdateView(LoginRequiredMixin, UpdateView):
model = Library
form_class = LibraryChangeForm
template_name = 'libraries/library_update.html'
def get_context_data(self, *args, **kwargs):
context = super(LibraryUpdateView, self).get_context_data(*args, **kwargs)
if self.request.POST:
context['book_form'] = BookFormSet(self.request.POST)
else:
context['book_form'] = BookFormSet()
return context
表格
class LibraryChangeForm(forms.ModelForm):
class Meta:
exclude = ['updated']
BookFormSet = inlineformset_factory(Library, Book, exclude = () )
如何预填充 html 页面以在表单集中显示数据。在我的循环中,{{form.as_p}}
有 3 个循环。当我 运行 print(BookFormsSet())
我看到以下
<input type="hidden" name="perdateinfo_set-TOTAL_FORMS" value="3"...
看起来它正在生成三个空白表单。
当我 运行 print(PerDateInfoFormSet(qs,qs2))
for qs = Library.objects.filter(library_id='slkdfj') and qs2=Book.objects.filter(library_id='slkdfj')
它告诉我 too many values to unpack (expected 2)
我可以传入查询集吗?我想我会传入一个 qs.first() 来获取图书馆,然后传入多个 (qs2) 查询集来获取图书馆中的所有书籍。
您需要将实例参数传递给表单集:
def get_context_data(self, *args, **kwargs):
context = super(LibraryUpdateView, self).get_context_data(*args, **kwargs)
if self.request.POST:
context['book_form'] = BookFormSet(self.request.POST, instance=self.object)
else:
context['book_form'] = BookFormSet(instance=self.object)
return context
我有一个表单集,但我不知道如何用数据库中的数据预填充它。
说实话,我有一个模型库和一个具有库外键的模型书。我希望有人能够(一次)编辑一个图书馆中的所有书籍。
html
{{ book_form.management_form }}
{% for form in book_form.forms %}
{{ form.as_p }}
{% endfor %}
views.py
class LibraryUpdateView(LoginRequiredMixin, UpdateView):
model = Library
form_class = LibraryChangeForm
template_name = 'libraries/library_update.html'
def get_context_data(self, *args, **kwargs):
context = super(LibraryUpdateView, self).get_context_data(*args, **kwargs)
if self.request.POST:
context['book_form'] = BookFormSet(self.request.POST)
else:
context['book_form'] = BookFormSet()
return context
表格
class LibraryChangeForm(forms.ModelForm):
class Meta:
exclude = ['updated']
BookFormSet = inlineformset_factory(Library, Book, exclude = () )
如何预填充 html 页面以在表单集中显示数据。在我的循环中,{{form.as_p}}
有 3 个循环。当我 运行 print(BookFormsSet())
我看到以下
<input type="hidden" name="perdateinfo_set-TOTAL_FORMS" value="3"...
看起来它正在生成三个空白表单。
当我 运行 print(PerDateInfoFormSet(qs,qs2))
for qs = Library.objects.filter(library_id='slkdfj') and qs2=Book.objects.filter(library_id='slkdfj')
它告诉我 too many values to unpack (expected 2)
我可以传入查询集吗?我想我会传入一个 qs.first() 来获取图书馆,然后传入多个 (qs2) 查询集来获取图书馆中的所有书籍。
您需要将实例参数传递给表单集:
def get_context_data(self, *args, **kwargs):
context = super(LibraryUpdateView, self).get_context_data(*args, **kwargs)
if self.request.POST:
context['book_form'] = BookFormSet(self.request.POST, instance=self.object)
else:
context['book_form'] = BookFormSet(instance=self.object)
return context