2010-05-23 121 views
6

我正在使用管理界面來查看發票和產品。爲了方便起見,我已將產品設置爲內置發票,因此我將以發票形式查看相關產品。正如你所看到的,我正在使用多對多的關係。如何在django admin中自定義多對多內聯模型

在models.py:

class Product(models.Model): 
    name = models.TextField() 
    price = models.DecimalField(max_digits=10,decimal_places=2) 

class Invoice(models.Model): 
    company = models.ForeignKey(Company) 
    customer = models.ForeignKey(Customer) 
    products = models.ManyToManyField(Product) 

在admin.py:

class ProductInline(admin.StackedInline): 
    model = Invoice.products.through 

class InvoiceAdmin(admin.ModelAdmin): 
    inlines = [FilteredApartmentInline,] 
admin.site.register(Product, ProductAdmin) 

的問題是,django的呈現產品作爲降的表下拉菜單(每個相關聯的產品的一個)。每個下拉菜單都包含列出的所有產品。因此,如果我有5000個產品,300個與某個發票相關聯,那麼django實際上會加載300x5000個產品名稱。而且桌子不美觀。

我不需要通過發票形式更新產品。我怎樣才能改變它,以便它只顯示內聯表中的產品名稱? 我應該重寫哪種形式,以及如何?

+0

在admin.py InvoiceAdmin它必須是內聯= [ProductInline] – Timo 2014-05-01 14:31:24

回答

4

我覺得很簡單,不要使用內聯,只是使用屬性ModelAdmin.filter_horizontal

+0

完全回答我的問題。但現在我有一個後續 - 這顯示產品名稱列表 - 如果我需要它鏈接到產品,以便我可以從發票鏈接到產品? – Jonathan 2010-05-24 07:04:46

+0

當您在發票中選擇產品並保存您鏈接對象的對象 – diegueus9 2010-05-24 21:31:55

+0

提供的鏈接已停用 – 2015-01-11 02:07:08

相關問題