2012-02-01 2 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) 

И я хочу, чтобы отобразить заказы с ТоварыЗаказа в списке:

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

Как это сделать?

+1

oops, скопируйте и вставьте ошибку, попробуйте вместо этого http://stackoverflow.com/questions/163823/can-list-display-in-a-django-modeladmin-display-attributes-of-foreignkey-field – Jingo

ответ

2

Это немного сложно сделать с вашей настройкой. Если вы используете related_name в вашей модели OrderItem, такие как

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

Вы можете использовать его в качестве ссылки от заказа к пунктам. Но снова у вас есть отношения OneToMany, поэтому у заказов есть много предметов. Вы можете обрешетка свойство для того, чтобы вы что-то вроде 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. И это работает.

Смежные вопросы