带有屏幕截图的示例项目:https://github.com/nspo/slowformsets-django-example
与作者,图书和出版商合作。
可以更新作者,您可以在其中更改作者拥有的所有图书以及添加新图书。 BookForms是使用inlineformset_factory创建的。书籍也有一个外键引用(发布者),可以在BookForm中选择。
渲染:
{% crispy form %}
{% crispy formset formset.form.helper %}
问题:
我有点了解发布者的请求,因为可以在隐式的ModelChoiceField中选择它们。但是,我不能用prefetch_related加快速度吗?我有一种感觉,在view.py的第12行和第13行传递的作者实例可能被复制"那么任何预取的数据都会被遗忘?
如果没有直接解决方案B / c的ModelChoiceField限制,如果在添加Book(但仅显示)后无法更改Publisher,则它也适用于我的情况。虽然没有太多变化,但不知道如何做到这一点。
答案 0 :(得分:1)
我们看不到任何能够制作这种猜谜游戏的代码。你提到prefetch_related但它没有显示在你链接的代码中。一般来说,我会做这样的事情
queryset=Book.objects.prefetch_related('publisher').filter(author=id_author)
BookInlineFormSet = inlineformset_factory(Author, Book, form=BookForm, extra=2, can_delete=False)
bookformset = BookInlineFormSet(instance=author, prefix="main", queryset=queryset)
我也猜测每本书都有一个出版商。所以它不会是prefetch_related而是select_related。