Django의 Paginator를 사용하여 한 번에 10 개의 폼을 표시하고자하는 modelsetset이 있지만 paginator = Paginator(formset, 10)
처럼 수행 할 수 없습니다. 방법이 있다면 올바른 방법은 무엇입니까?페이지 넘김 Django formset
4
A
답변
13
이것은 내가 내 문제에 발견 된 솔루션의 일반적인 예입니다 : 당신은 만들 필요가
FormSet = modelformset_factory(MyModel, form=MyForm, extra=0)
if request.method == 'POST':
formset = FormSet(request.POST, request.FILES)
# Your validation and rest of the 'POST' code
else:
query = MyModel.objects.filter(condition)
paginator = Paginator(query, 10) # Show 10 forms per page
page = request.GET.get('page')
try:
objects = paginator.page(page)
except PageNotAnInteger:
objects = paginator.page(1)
except EmptyPage:
objects = paginator.page(paginator.num_pages)
page_query = query.filter(id__in=[object.id for object in objects])
formset = FormSet(queryset=page_query)
context = {'objects': objects, 'formset': formset}
return render_to_response('template.html', context,
context_instance=RequestContext(request))
다음 views.py
파일에서
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ('description',)
다음 forms.py
파일에서
현재 페이지의 객체와 formset을 비교합니다. 그렇지 않으면 POST 메서드에서 formset = FormSet(request.POST, request.FILES)
을 수행하려고 시도하면 Django가 MultiValueDictKeyError를 발생시킵니다 오류. template.html
파일에서
:
{% if objects %}
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset.forms %}
{{ form.id }}
<!-- Display each form -->
{{ form.as_p }}
{% endfor %}
<input type="submit" value="Save" />
</form>
<div class="pagination">
<span class="step-links">
{% if objects.has_previous %}
<a href="?page={{ objects.previous_page_number }}">Previous</a>
{% endif %}
<span class="current">
Page {{ objects.number }} of {{ objects.paginator.num_pages }}
</span>
{% if objects.has_next %}
<a href="?page={{ objects.next_page_number }}">next</a>
{% endif %}
</span>
</div>
{% else %}
<p>There are no objects.</p>
{% endif %}
1
더 올바른 방법은 여기
...
formset = FormSet(queryset=page_query.object_list)
...
0
문제는 당신이 QuerySet
을 기대하고있어 상황에 맞는 브랜드 (A Page
)를 사용하는 것입니다 사용 . 그래서 우리는 망할 QuerySet
이 필요합니다. 당신은 옳은 방법이지만 많은 코드가 있습니다. 소스 코드에서
우리는이 :
class Page(collections.Sequence):
def __init__(self, object_list, number, paginator):
self.object_list = object_list
self.number = number
self.paginator = paginator
...
그래서, 우리 self.object_list
속성에서의 검색어와 단지 그것을 사용!
formset = SomeModelFormSet(queryset=objects.object_list)
관련 문제
- 1. Django formset : POST formset
- 2. django admin 인라인 formset
- 3. Django 모델 formset 질문
- 4. Django dynamic formset forms
- 5. django 복잡한 formset 문제
- 6. Django formset 중복 값
- 7. django unboundlocalerror formset
- 8. Django Formset 대 Modelform
- 9. Django - ManyToMany로 formset 저장
- 10. 페이지 넘김 현재 페이지 색상
- 11. Django : 문서의 인라인 formset 예제
- 12. Django 인라인 formset, DELETE 확인
- 13. Django 1.4 formwizard with formset
- 14. PHP 페이지 넘김 코드
- 15. 페이지 넘김 UIWebView 내용
- 16. 페이지 넘김 스크립트
- 17. 페이지 넘김 URL 해시 보존
- 18. 페이지 넘김 쿼리/반복기 레시피
- 19. PHP 400 페이지의 페이지 넘김
- 20. ASP.NET 워터 마크 페이지 넘김
- 21. 페이지 넘김 효과가 어떻게 돌아가는지.
- 22. iPad에서 페이지 넘김 UIScrollView 테스트하기
- 23. UIPageView - 페이지 넘김 속도 제어
- 24. 비트 맵 넘김 페이지 인쇄
- 25. Django : formset extra를 사용하여 레이블을 변경하는 방법?
- 26. Django - 여러 기준에 대한 평가 : 모델 Formset?
- 27. Django Formset ... 필드 제외를 사용하는 사용자
- 28. Django Formset 사용자 정의 필드 제외
- 29. Django Formset Grid로 표시 할 테이블로
- 30. Django 사용자 정의 formset 저장 방법
이것에 대해 자세히 설명해 주시겠습니까? 재미 있네. –
'BaseModelFormSet'이'QuerySet' 객체를 필요로하고'list'로 실패 할 것이기 때문에 이것은 동작하지 않을 것입니다. –
이 결과는 다음과 같은 오류가 발생합니다 :'조각이 채워지면 질의를 필터링 할 수 없습니다 .' @GillBates :'object_list' 'list'가 아닌'QuerySet'을 리턴합니다. 그래서 @ Filly의 대답을 사용하십시오! – Caumons