Paginate Django formset

前端 未结 5 1043
失恋的感觉
失恋的感觉 2020-12-29 14:42

I have a model formset that I want to display 10 forms at a time using Django\'s Paginator, but it can\'t be done like paginator = Paginator(formset, 10). What\

5条回答
  •  天命终不由人
    2020-12-29 15:07

    A more elegant solution is to set ordered=True on the Page object so that it can be passed to a ModelFormSet.

    Here is an example:

    forms_per_page = 10
    current_page = 1
    
    ModelFormSet = modelformset_factory(MyModel, form=MyForm)
    queryset = MyModel.objects.all()
    
    paginator = Paginator(queryset, forms_per_page)
    page_object = paginator.page(current_page)
    page_object.ordered = True
    
    form = ModelFormSet(queryset=page_object)
    

    This is more efficient than the accepted answer because avoids the second database query that takes place in the line:

    page_query = query.filter(id__in=[object.id for object in objects])
    

提交回复
热议问题