使用另一个formset包装表单和相关的内联formset

时间:2011-09-20 09:49:18

标签: django django-forms

对不起问题标题,我不知道如何简要解释这个问题。

基本上我处于这样的情况:

models.py

class Author(Model):
    ...

class Book(Model)
    author = models.ForeignKey(Author)

views.py

for author in Author.objects.filter(name=""):
    author_form = AuthorForm(instance=author) #This is a model form
    book_formset = inlineformset_factory(Author, Book, instance=author)

我现在要做的是制作一套作者。每个元素都应包含AuthorForm和相关book_formset的等值。

关于如何做的任何想法??

由于

1 个答案:

答案 0 :(得分:1)

This person可能已经完成了你的要求,但我认为这不是你所需要的。

如果我理解正确,你就近了,但应该多次使用工厂(而不是工厂生成器函数)来创建一个列表,其中每个元素都有两个独立的项目:作者表单和带有书籍的内联表单集。关键是你将有两个独立的项目,而不是一个在另一个内部。

每个表单/内联formset都需要一个唯一的前缀来相对于渲染的html / form汤中的其他表单进行标识。

在您看来:

AuthorBooksFormSet = inlineformset_factory(Author, Book)
author_books_list = list()
for author in author_queryset: #with whatever sorting you want in the template
    prefix = #some unique string related to the author
    author_form = AuthorForm(instance=author,
                             prefix='author'+prefix)
    author_books_formset = AuthorBooksFormSet(instance = author,
                                              prefix = 'books'+prefix)
    author_books_list.append((author_form, author_books_formset))

将整个列表发送到您的模板并:

{% for author_form, author_books_formset in author_books_list %}
    ...something with author_form
    ...something with author_books_formset
{% endfor %}

如果django在formset中为实例对象提供表单,您甚至可以跳过作者表单。但是我从来没有使用它们,所以我不确定。

我想你已经离开了,因为我通过谷歌搜索找到了这个,但你最终做了什么?