我有一个django模型,其自引用如下所示的多对多字段。
class Product(ModelBase):
name = models.CharField(max_length=1000)
category = models.ForeignKey(Category, on_delete=models.DO_NOTHING)
company = models.ForeignKey(Company, on_delete=models.DO_NOTHING)
alternatives = models.ManyToManyField('self', symmetrical=False, blank=True)
我对django管理表单感到特别满意,因为该表单将替代品的选项作为多选列表框列出,因为对于许多产品,选择一种或多种替代产品将变得很繁琐。 有没有一种方法可以丰富这种用户体验,我已经看过django-advanced-filters了,但是它不适用于django3。本质上,如果我可以进行预输入搜索来过滤列表中的项目并限制初始根据所选类别列出。
----更新---- admin.py
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
search_fields = ['name', ]
@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
search_fields = ['name', ]
list_display = ['name', 'website', ]
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
search_fields = ['name', ]
list_filter = ['category', ]
list_display = ['name', 'category', 'company', ]
感谢您的帮助。
答案 0 :(得分:1)
ManyToManyField
的默认行为将显示为vertical display。
您需要做的是使用filter_horizontal
选项在admin.py
上添加一行,将ManyToManyField
的显示更改为水平显示。
from django.contrib import admin
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
search_fields = ['name', ]
list_filter = ['category', ]
list_display = ['name', 'category', 'company', ]
filter_horizontal = ['alternatives', ]
它随后将在您的管理页面上显示为以下内容:
可以在您的Authentication and Authorization
管理员的Groups
添加表单上看到此示例。