python - Django 2.x Admin 中 InLine ManyToMany 字段的 filter_horizon 或 filter_vertical
问题描述
这是我的模型关系(从 Django 2.1 官方文档复制 - 我的模型是这个的精确副本,但只有模型名称不同。):
class Person(models.Model):
name = models.CharField(max_length=50)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(
Person,
through='Membership',
through_fields=('group', 'person'),
)
class Membership(models.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
这是我的 admin.py:
class MembershipInLine(admin.StackedInline):
model = Membership
class PersonAdmin(admin.ModelAdmin):
inlines = [
MembershipInLine,
]
我在我的个人页面上得到这样的字段: 当前视图
但相反,我希望有这种风格的观点: 期望的观点
我在官方文档filter_horizontal
中找到了,但我不知道如何将它们与内联一起使用。我怎样才能做到这一点?filter_vertical
编辑:
我已经按照文档中的描述进行了尝试:
class MembershipInLine(admin.StackedInline):
model = Membership # (and also tried with = Group.members.through)
filter_horizontal = ('group', )
但它抛出:
(admin.E020) 'filter_horizontal[0]' 的值必须是多对多字段。
解决方案
我会咨询 auth 管理面板以获取组的权限。尝试类似的东西
class PersonAdmin(admin.ModelAdmin):
search_fields = ()
ordering = ()
filter_horizontal = ('membership',)
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
if db_field.name == 'membership':
qs = kwargs.get('queryset', db_field.remote_field.model.objects)
# Avoid a major performance hit resolving membership names which
# triggers a content_type load:
kwargs['queryset'] = qs.select_related('content_type')
return super().formfield_for_manytomany(db_field, request=request, **kwargs)
https://github.com/django/django/blob/master/django/contrib/auth/admin.py#L29
推荐阅读
- mobile - 用于移动设备的 Dynamics CRM 删除网格上的添加按钮
- javascript - Antd RangePicker 无法为时间设置 12 小时格式
- angularjs-directive - 如何使用 videogular 的提示点与 angularjs 集成自定义广告
- html - AngularJS - 如何引用具有非常量名称的控制器
- azure - 如何将序列化数据从 SQL 数据库传输到 cosmos Db
- selenium - Selenium C# Extent 报告未在指定文件夹中生成 HTML 文件
- acumatica - 从销售订单摘要报告中排除订单
- powershell - Powershell 数组问题
- spring - Spring 框架:mvc:resources 不起作用
- c# - C# - 确定方法 ReturnType 是否属于特定类型