【问题标题】:Django: prepopulate formsetDjango:预填充表单集
【发布时间】:2018-06-19 03:39:05
【问题描述】:

我有一个表单集,但我不知道如何使用数据库中的数据预填充它。

说实话,我有一个模型库和一个模型书,它有一个库的外键。我希望有人能够(一次)编辑一个图书馆中的所有书籍。

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"... 

所以看起来它正在生成三个空白表单。

当我为qs = Library.objects.filter(library_id='slkdfj') and qs2=Book.objects.filter(library_id='slkdfj') 运行print(PerDateInfoFormSet(qs,qs2)) 时,它告诉我too many values to unpack (expected 2)

我可以传入一个查询集吗?我想我会传入一个 qs.first() 来获取图书馆,然后通过多个 (qs2) 查询集来获取图书馆中的所有书籍。

【问题讨论】:

    标签: django formset


    【解决方案1】:

    您需要将实例参数传递给表单集:

    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
    

    【讨论】:

    • 所以,我最终得到了这个错误:无法查询“zd4zjgla0j”:必须是“图书馆”实例,其中“zd4zjgla0j”是书籍实例。而不是 self.instance 我将一个查询集放入该书的图书馆实例并且它起作用了。谢谢!
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2012-07-20
    • 2012-08-14
    • 2010-10-30
    • 2023-02-10
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多