我有Book
模型,其中包含title
和author
字符串字段。 title
字段可能不同,但author
始终等于joey
或martin
。
在一个页面上,我想显示两个formsets
,但我不想创建QuerySet
并为每个表单单独进行数据库查询。是否可以一次获取所有对象,然后将它们拆分为单独的lists
并将它们传递给formset
?
我的观看功能:
def index(request):
books = Book.objects.all() # Here we will take all at once
joey_books = []
martin_books = []
for book in books: # books here are evaluated - only once!
if book.author == 'joey':
joey_books.push(book)
elif book.author == 'martin':
martin_books.push(book)
joey_book_formset = forms.modelformset_factory(
Book,
form=BookForm,
fields=['title', 'author'],
can_delete=True, extra=1
)
joey_book_formset = joey_book_formset(queryset=joey_books) # Exception raised
martin_book_formset = forms.modelformset_factory(
Book,
form=BookForm,
fields=['title', 'author'],
can_delete=True, extra=1
)
martin_book_formset = martin_book_formset(queryset=martin_books) # Exception raised
context = {
'joey_forms': joey_book_formset,
'martin_forms': martin_book_formset,
}
return render(request, 'myapp/index.html', context)
我的期望:
将创建两个表单集,并且只运行一个查询。
问题:
引发exception
之后:
AttributeError:' list'对象没有属性' ordered'
可能是因为formsets
只接受QuerySet
个对象。这有什么解决方法吗?想象一下,我在单页上有50个表单。我不想为每个表单集运行50个单独的查询。