2014-04-25 4 views
2

status 변수에 기반한 순서로 데이터베이스 객체 목록을 표시하는 방법을 찾고 있습니다. 응용 프로그램은 주문 추적 응용 프로그램입니다. 각 주문에는 '유휴', '배달 대기 중', '픽업 준비'등의 상태가 있습니다. 상태 목록별로 주문 목록을 표시하고 싶습니다. 나는 이미 작동하는 필터를 가지고 있지만 '유휴'주문이 맨 위에오고 '배달 대기 중'주문이 뒤 따르는 주문 전체 목록을 정렬하는 방법이 있는지 궁금합니다. 분명히, admin.py 파일에 statusordering에 추가 할 수 없습니다. 그 이유는 사전 순으로 상태를 정렬하기 때문입니다.Django에서 'status'변수로 객체를 정렬하는 법

누구든지이 문제를 해결할 수있는 간단한 방법을 알고 있습니까? 나는이 모든 것을 지나치게 생각하고 있다고 확신합니다.

답변

0

SQL을 정렬하려면 두 가지 방법이 있습니다. 사용자 정의 쿼리를 고려하는 것이이없는 실용적인 것 같으면

는 SORT_ORDER

하여 주문 테이블과 주문이 테이블에 가입하실 수 있습니다

class status (Model.model): 
    status = Model.CharField() 
    sort_order = Model.IntegerField() 

숫자 값과 상태를 연결하는 모델을 만드는 것이 당신을 위해 주문을합니다. 이것을 .extra 메소드를 사용하여 orm 메소드에 연결할 수 있습니다. django documentation

Order By Case 
      When status_order Like 'idle Then 1 
      When status_order Like 'awaiting delivery' Then 2 
      When status_order Like 'ready for pickup' Then 3 
      Else 99 
      End Asc 
+0

내가 처음 언급 한 것처럼 색인을 사용하려고 생각했습니다. 그러나 절대적으로 필요한 경우가 아니라면 데이터베이스에 아무 것도 추가하고 싶지 않았습니다. 필자가 언급 한 두 번째 방법을 실제로 따르지는 않았습니다. 아직 Python/Django를 처음 접했을 때입니다. – nblakey

+0

그럼 그냥 사용해보십시오. 그것은 상처를주지 않을 것이다 ;-) –

1

내가 각 상태에 이름에 영문자를 추가 한 일을 결국 모든에 대한 자세한 정보를 참조하십시오. 각 상태에 대해 이미 멋진 이름을 사용했기 때문에 가독성에 큰 영향을 미치지 않는다고 생각했습니다. 나는 이것이 세계에서 가장 좋은 해결책이라고 말할 수는 없지만 그것이 가장 단순하다고 믿습니다.

STATUS_OF_ORDER = (
    ('A_IDLE', 'Not yet ordered'), 
    ('B_SHIP', 'Awaiting delivery'), 
    ('C_PICK', 'Ready for pickup'), 
    ('E_UNAV', 'Unavailable for order'), 
    ('D_BACK', 'Backordered - awaiting delivery'), 
    ('F_CANC', 'Canceled by customer'), 
    ('G_ARCH', 'Fulfilled'), 
    ) 
    status = models.CharField(max_length=6, choices=STATUS_OF_ORDER, 
          default='A_IDLE', editable=False) 
관련 문제