2013-06-30 2 views
0

django 양식 라이브러리를 사용하여 양식을 만들려고합니다. 그러나 양식으로 채워진 모델을 볼 때 값은 순서가 틀립니다. 명백한 이유가 없습니다.Django Form 주문은 비스무트입니다

Monday: 

Tuesday: 

Wednesday: 

Thursday: 

Friday: 

Saturday: 

Sunday: 

:

여기
<form action="" method="post"> 
     <table> 
      {{ form.as_table }} 
     </table> 
     {% csrf_token %} 
     <input class="btn btn-primary" style="float: left;" type="submit" value="Submit"> 
</form> 

는 결과 HTML 양식 (이 순서에 있습니다)입니다 : 여기

def reoccurring_view(request): 
if request.method == 'POST': 
    form = ReoccurringForm(request.POST) 
    counter = 0 
    if form.is_valid(): 
     for key, value in request.POST.iteritems(): 
      counter += 1 
      if value is not None: 
       day = itemize(value, counter) 
       add = Reoccurring(day.Day, day.N, day.S, day.E) 
       add.save() 
else: 
    form = ReoccurringForm() 
return render(request, 'Reoccurring.html', {'form': form}) 

내 템플릿입니다 : 여기

내이다 여기 내 양식 수업 :

그들은 이것을 there..is 안 여분의 위치와 함께, 순서가 ...

1 [u'monday'] [u'06:00 p.m.'] [u'07:30 p.m.'] 
2 [u'tuesday'] [u'06:00 p.m.'] [u'07:30 p.m.'] 
3 [u'friday'] [u'06:00 p.m.'] [u'07:30 p.m.'] 
4 [u'wednesday'] [u'08:30 a.m.'] [u'09:30 a.m.'] 
5 [u'thursday'] [u'06:00 p.m.'] [u'07:30 p.m.'] 
6 [u'sunday'] [u'06:00 p.m.'] [u'07:30 p.m.'] 
7 [] [] [] 
8 [u'saturday'] [u'06:00 p.m.'] [u'07:30 p.m.'] 

당신이 볼 수있는 : 아직 여기 966,853,210

이다는 관리자를 통해 결과 인구 모델 버그? (EDIT : csrf 토큰은 dict에 전달되지만 쉽게 무시됩니다.)하지만 순서는 여전히 수수께끼입니다!

감사합니다.

편집 : 더 조사를 I 출력 자체를 DICT를 결정하고이 파손되지 않았는지 그리고 왜하지만), 아무 생각이 없었다 :

> <QueryDict: {u'monday': [u'monday, 06:00 p.m. to 07:30 p.m.'], 
> u'tuesday': [u'tuesday, 06:00 p.m. to 07:30 p.m.'], u'friday': 
> [u'friday, 06:00 p.m. to 07:30 p.m.'], u'wednesday': [u''], 
> u'thursday': [u'thursday, 06:00 p.m. to 07:30 p.m.'], u'sunday': 
> [u'sunday, 06:00 p.m. to 07:30 p.m.'], u'csrfmiddlewaretoken': 
> [u'AcxRjdNeTFwij7vwtdplZPy2SRlwrnzl'], u'saturday': [u'saturday, 06:00 
> p.m. to 07:30 p.m.']}> 

심지어 명시 적으로 필드의 순서를 설정하려고 :

def __init__(self, *args, **kwargs): 
     super(ReoccurringForm, self).__init__(*args, **kwargs) 
     self.fields.keyOrder = [ 
      'monday', 
      'tuesday', 
      'wednesday', 
      'thursday', 
      'friday', 
      'saturday', 
      'sunday'] 

그러나 이것은 전혀 차이가 없습니다 ... 그것은 순서가 올 것 같다,하지만 POST의 DICT에의 데이터의 처리는 어떻게 든 엉망지고, 어떤 통찰력이 크게 감사하겠습니다!

+0

양식이 렌더링되거나 해당 QueryDict를 덤프하는 경우에만 순서가 잘못됩니까? – Krab

+0

렌더링 된 폼이 원래 질문과 같이 정확했기 때문에 렌더링 된 순서가 정확하다는 것을 지정하고 주목했습니다. POST 덤프가 잘못되었습니다. – ljrh

답변

1
당신은 장고의 POST의 DICT의 필드의 순서에 의존 할 수

나는 두려워 - 본질적으로 사전 이니까 순서가 정해져 있지 않다.

게시 된 데이터의 순서가 중요한 경우 Django는 request.raw_post_data을 제공합니다.

+0

나는 두려웠습니다. 그 6 개의 값은 요청을 통해 마술처럼 질서있게 머물 수 있습니다. d : 당신의 대답은 꽤 완전 합니다만, 이것을 읽는 다른 사람들처럼, request.raw_post_data는 deprec이며 request.body로 대체되었습니다. 그러나 당신은 정확하고 계속되었습니다. 주문한 dict을 얻는 다른 방법이 있다면 알려주세요! – ljrh

+0

raw_post_data에 대한 좋은 지적, 감사합니다 :) – Ben

-1

QueryDict은 dict 유형이므로 임의의 순서로 키를 반환합니다.

이 정렬되지 않은 키의 집합으로 사전에 생각하는 것이 가장 좋습니다 : 값 쌍

http://docs.python.org/3/tutorial/datastructures.html#dictionaries

+0

난 당신의 솔루션을 시도하고 여전히 나에게 위의 QueryDict 엉망으로 준다. 그리고 예, 나는 데이터베이스에 저장하고 있지만 간접적으로. 하지만 그 QueryDict는 POST 데이터에서 직접 가져온 것입니다. 그래서 나는 이것이 정확하지 않은 이유를 모릅니다.나는 필드와 솔루션을 명시 적으로 정렬하려고 시도했지만 손실이 있습니다. 감사! (난 여전히 뭔가를 놓칠 수있다) – ljrh

+0

@ user2016117 : django의 어떤 버전을 사용합니까? – Krab

+0

1.5.1을 사용하고 있습니다. 렌더링에 포함되지는 않았지만 결과적으로 POST 데이터의 순서에 따라 다른 포스터가 내 이슈를 잘못 이해했다고 생각합니다. – ljrh

0

파이썬 사전은 주문이 필요하지 않습니다. 장고 응답은 사전이기 때문에 의존 할 수없는 임의의 순서로 진행됩니다.