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

标签 python django django-admin many-to-many django-forms

我正在使用管理界面查看发票和产品。为了方便起见,我将产品设置为发票内联,这样我就会在发票的表格中看到相关产品。如您所见,我使用的是多对多关系。

在 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 个产品名称。 table 也不美观。

我不需要通过发票表格更新产品。我怎样才能改变它,以便它只显示在线表格中的产品名称? 我应该覆盖哪种形式,以及如何覆盖?

最佳答案

我觉得很简单,不要使用内联,只需要使用属性ModelAdmin.filter_horizontal

关于python - 如何在 django admin 中自定义多对多内联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893924/

相关文章:

python - viewflow.io : What is the recommended pattern to go a step back in a flow?

python - Django 是否具有 Rails 的 "bundle install"的等价物?

python - 限制向用户显示某些数据

django - 在 django-admin 中过滤选择字段选项

python - django 上下文处理器 - 如何从一个函数返回所有内容?

python - 在 python 中使用 boolean 列表

python - Pypy 写文件慢

python - 如何在 Windows 64 位上安装 ImageMagick 和 Anaconda?

django - 只允许填写 Django 模型和管理中的一个字段或另一个字段

python - Django Admin 中的自定义 changelist_form 和 list_editable