2014-03-25 3 views
0

약 2 주 전에 Python과 Django에 소개되었습니다. Django 1.6과 Python 3.3을 사용하고있다.장고 관리에서 외래 키를 선택하여 "정보"표시

내 프로젝트는 주문 관리 시스템입니다. 작동 원리는 다음과 같습니다. 고객이 상점에 와서 물품을 주문합니다. 해당 항목은 주문서에 기록되며 직원이 공급자에게 주문할 때까지 유휴 상태입니다. 기본적으로 customer_name, order_date, status 등의 정보를 수집하는 Order 테이블이 있습니다. 그런 다음 Order의 모든 요소가 포함 된 EmployeeOrder 테이블 (Order와의 1-1 관계)이 있지만 employee_placed 및 employee_order_date (거의 Order를 확장).

내가하려는 것은 사용자가 EmployeeOrder를 배치하여 어떤 고객 주문을 수행할지 선택할 때 고객 주문 정보가 표시되도록 코드를 작성하는 것입니다. 나는 그것이 현재 어떻게 표시되는지는 상관하지 않는다. 팝업은 정상적으로 작동 할 것이다. 나는 그것을하는 법을 모른다. 그리고 나는 어디에도 그것을 만나지 않았다. 현재 드롭 다운 상자에는 Order 1, Order 2 등이 표시됩니다. 사용자는 어떤 항목이 어떤 순서로 포함되었는지 기억하지 않으므로 주문 정보를 표시해야합니다. 어쨌든, 여기 내 코드는 지금까지의 :

models.py

class Order(models.Model): 
     customer_order_date = models.DateTimeField('Date helped') 
     customer_placed = models.ForeignKey(Customer) 
     employee_helped = models.ForeignKey(Employee) 

     STATUS_OF_ORDER = (
      ('IDLE', 'Not yet ordered'), 
      ('SHIP', 'Awaiting delivery'), 
      ('PICK', 'Ready for pickup'), 
      ('UNAV', 'Unavailable for order'), 
      ('BACK', 'Backordered - awaiting delivery'), 
      ('CANC', 'Canceled by customer'), 
      ('ARCH', 'Fulfilled - archived'), 

     ) 

     status = models.CharField(max_length=4, choices=STATUS_OF_ORDER, 
           default='IDLE', editable=False) 
     paid = models.BooleanField('Paid', default=False) 
     ship = models.BooleanField('Ship', default=False) 
     comments = models.CharField(max_length=200, blank=True, null=True) 
     item = models.ManyToManyField(Item) 

     def __str__(self): 
      return 'Order ' + str(self.id) 

     def is_idle(self): 
      return self.status == 'IDLE' 

    class EmployeeOrder(models.Model): 
     order = models.OneToOneField(Order, primary_key=True, 
            limit_choices_to={'status': 'IDLE'}) 
     employee_order_date = models.DateTimeField('Date ordered') 
     employee_placed = models.ForeignKey(Employee) 

admin.py

class OrderAdmin(admin.ModelAdmin): 
     list_display = ('customer_order_date', 'customer_placed') 
     raw_id_fields = ('customer_placed', 'item')  

    class EmployeeOrderAdmin(admin.ModelAdmin): 
     list_display = ('employee_order_date', 'employee_placed') 

모든 모든 도움 감사합니다 나는 아직도 내가 총 멍청한 놈 때임을 인정으로 파이썬과 장고에 온다!

답변

1

직원이 관리자 사이트를 사용하여 고객 주문에서 직원 주문을 생성 할 수있게하려는 것 같습니다. 나는 고객 주문을위한 원시 ID 필드를 추가하는 것만 큼 간단 할 수 있다고 생각한다. 직원이 직원 순서를 만들 때

class EmployeeOrderAdmin(admin.ModelAdmin): 
    list_display = ('employee_order_date', 'employee_placed') 
    raw_id_fields = ('order',) 

지금, 그들은 그들이 원하는 순서를 찾기 위해 OrderAdmin 페이지를 사용할 수 있습니다 : 그것은 당신이 너무 좋아 EmployeeOrderAdmin 변경할 수 있다고 생각합니다.

또한 팝업 창이 특정 방식으로 주문을 표시한다고 가정합니다. 이 경우 해당 팝업 창을 표시하라는 요청에는 pop이라는 추가 GET 매개 변수가 포함됩니다. 너는 할 수 있었다 :

class OrderAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(ActiveOfferAdmin, self).queryset(request) 
     if request.GET.get('pop'): 
      return qs.order_by(...) 
     return qs 
+0

너는 .... 훌륭한 일을 알고있다! 나는 그것을 생각하는 길이었다! 나는 적어도 이론적으로는 선택 될 수있는 명령이 많지 않았기 때문에 생각했다. 드롭 다운 상자는 괜찮을 것이다. 불행히도 드롭 다운을 사용할 때 주문 데이터를 볼 수 없습니다. 고마워요! – nblakey

+0

좋아요! 그것이 내가하는 방법이다. 드롭 다운 상자에 개체의 \ _ \ _ str__ 또는 \ _ \ _ unicode__ 메서드가 반환하는 것이 무엇이든 표시되지만 일반적으로 이러한 메서드를 디버깅 이외의 방법으로 사용하지 않으려 고합니다. – DavidM

+0

당신은 그 생각이 맞습니다. 내가 말했듯이, 그것은 매우 서술 적이 지 않습니다. 이 방법은 훨씬 낫다. 이제 항목 이름이 순서대로 표시되도록 조인 테이블에서 작업해야합니다. – nblakey