2012-02-01 43 views
1

顯示來自相關模型數據我有兩類:如何管理

class Order(models.Model): 
    ... 
    date = models.DateTimeField(blank=True, verbose_name=u'Date add',default=datetime.now) 
    price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name=u'Price', blank=True, null=True) 
    ... 

    def __unicode__(self): 
     return "%s" % (self.date) 

class OrderItem(models.Model): 
    ... 
    date = models.DateTimeField(blank=True, verbose_name=u'Date add',default=datetime.now) 
    order = models.ForeignKey(Order, verbose_name=u'Order') 
    itemname = models.CharField(max_length=255, verbose_name=u'Item name') 
    quantity = models.PositiveIntegerField(default=1, verbose_name=u'Quantity') 
    price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name=u'Price') 


def __unicode__(self): 
     return "%s" % (self.itemname) 

而且我想在列表的OrderItems顯示訂單:

class OrderAdmin(admin.ModelAdmin): 
    list_display = ('price','<????>ORDERITEMS</????>') 

怎麼辦呢?

+1

哎呀,複製和粘貼錯誤,試試這個,而不是http://stackoverflow.com/questions/163823/can-list-display-in-a-django-modeladmin-display-attributes-of-foreignkey-field – Jingo 2012-02-01 10:16:45

回答

2

您的設置有點困難。如果您在OrderItem模型中使用related_name,例如

order = models.ForeignKey(Order, related_name='items') 

您可以將它用作訂單項目的參考。但是你也有一對多的關係,所以訂單有很多項目。你可以箱子,以便屬性,讓你像NUMBER_OF_ITEMS如

@property 
def number_of_items(self): 
    return self.items.count() 

,並使用在OrderAdmin如

class OrderAdmin(admin.ModelAdmin): 
    list_display = ('price','number_of_items') 

這是很容易,如果你正試圖從OrderItem的訪問順序ModelAdmin,因爲它返回一個對象,因此您可以這樣做:

class OrderItemAdmin(admin.ModelAdmin): 
    list_display = ('itemname',order__price') 

請注意在訂單和價格之間使用雙下劃線。

0

我寫此函數來命令模式:

def get_items(self): 
    text = "" 
    for i in self.oitems.all(): 
     text = text + '<br />' + i.itemname 
    return text 
get_items.allow_tags = True 

我添加related_name = 「oitems」 訂購的OrderItem的關鍵。它的工作原理。