如何在django admin中自定义多对多内联模型

Jon*_*han 6 python django many-to-many django-forms 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)
Run Code Online (Sandbox Code Playgroud)

在admin.py中:

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

class InvoiceAdmin(admin.ModelAdmin):
    inlines = [FilteredApartmentInline,]
admin.site.register(Product, ProductAdmin)
Run Code Online (Sandbox Code Playgroud)

问题是django将产品显示为下拉菜单表(每个相关产品一个).每个下拉列表都包含列出的所有产品.因此,如果我有5000个产品且300个与某个发票相关联,则django实际上会加载300x5000个产品名称.桌子也不美观.

我不需要通过发票表格更新产品.如何更改它以便它只在内联表中显示产品名称?我应该覆盖哪种形式,以及如何?

die*_*us9 4

我认为很简单,不要使用内联,只需使用属性ModelAdmin.filter_horizo ​​ntal