2014-03-25 36 views
0

大約兩週前我被介紹給Python和Django,請耐心等待。我現在也應該說我正在使用Django 1.6和Python 3.3。通過在Django中選擇外鍵顯示「info」admin

我的項目是一個訂單管理系統。以下是它的工作原理:客戶進入商店並訂購物品。該項目被放入一個訂單中,該訂單在員工向供應商下訂單之前是空閒的。基本上,我有一個訂單表,它收集諸如customer_name,order_date,status等信息。然後,我有一個EmployeeOrder表(與Order的關係爲1-1),它具有Order的所有元素,但也包含employee_placed和employee_order_date(幾乎只是擴展Order)。

我想要做的就是這樣,當用戶選擇該客戶的訂單正在放置一個EmployeeOrder滿足,則顯示的是客戶訂單的信息編寫代碼。我真的不在乎它現在是如何顯示的,彈出窗口可以正常工作。我只是不知道該怎麼做,我沒有遇到任何問題。現在下拉框只顯示訂單1,訂單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') 

任何和所有幫助表示讚賞,因爲我仍然承認,我是一個總的小白,當它來Python和Django!

回答

1

這聽起來像你希望員工能夠使用管理網站從客戶訂單創建員工訂單。我認爲這可能與爲客戶訂單添加原始ID字段一樣簡單。也就是說,我認爲你可以改變EmployeeOrderAdmin像這樣:

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

現在,當僱員創建僱員順序,他們將能夠使用OrderAdmin頁面找到他們想要的順序。

此外,假設您希望彈出窗口以特定方式顯示訂單。在這種情況下,請記住顯示該彈出窗口的請求將包含一個名爲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

相關問題