Bagaimana cara mengkustomisasi model sebaris banyak ke banyak di admin Django

Saya menggunakan antarmuka admin untuk melihat faktur dan produk. Untuk mempermudah, saya telah mengatur produk sebagai inline ke invoice, jadi saya akan melihat produk terkait di formulir invoice. Seperti yang Anda lihat, saya menggunakan hubungan banyak ke banyak.

Di model.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)

Di admin.py:

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

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

Masalahnya adalah Django menampilkan produk sebagai tabel menu drop down (satu per produk terkait). Setiap drop down berisi semua produk yang terdaftar. Jadi jika saya mempunyai 5000 produk dan 300 dikaitkan dengan faktur tertentu, Django sebenarnya memuat 300x5000 nama produk. Mejanya juga tidak estetis.

Saya tidak memerlukan produk untuk diupdate melalui formulir invoice. Bagaimana cara mengubahnya sehingga hanya menampilkan nama produk di tabel sebaris? Formulir mana yang harus saya ganti, dan bagaimana caranya?


person Jonathan    schedule 23.05.2010    source sumber
comment
Di admin.py InvoiceAdmin harus inlines=[ProductInline]   -  person Timo    schedule 01.05.2014


Jawaban (1)


Menurut saya sederhana, jangan gunakan inline, cukup gunakan properti ModelAdmin.filter_horizontal

person diegueus9    schedule 24.05.2010
comment
Itu menjawab pertanyaan saya sepenuhnya. Tapi sekarang saya punya tindak lanjut - ini menunjukkan daftar nama produk - bagaimana jika saya memerlukannya sebagai tautan ke produk sehingga saya bisa menautkan dari faktur ke produk? - person Jonathan; 24.05.2010
comment
ketika Anda memilih produk di Faktur dan menyimpan objek, Anda menghubungkan kedua objek tersebut - person diegueus9; 25.05.2010
comment
Tautan yang diberikan sudah mati - person Vladimir Kroz; 11.01.2015
comment
@VKroz Saya memperbaiki tautannya. Ini untuk Django 1.2 (Django saat ini ketika pertanyaan diajukan), sekarang saya memasang link untuk Django 1.7. - person diegueus9; 13.01.2015