【发布时间】:2019-03-07 20:11:29
【问题描述】:
这是我的模型关系(复制自 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,
]
我的个人页面上的字段如下所示: Current view
但相反,我希望有这种观点: Desired view
我在official documentation 中找到了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]' 的值必须是多对多字段。
【问题讨论】:
-
根据文档,水平过滤器和垂直过滤器适用于许多字段。因此,在您的情况下,它们可以与 Group 一起使用。
-
@not2acoder 我的模型已经是ManyToMany
-
所以 filter_horizontal 可以用在 group admin 中,一个具有 manytomany 字段的模型,而不是 person。
-
它不适用于您的建议或我的第一种方法(使用中间模型)@not2acoder,您可以在编辑部分看到
-
由于您使用的是Intermediate through model,在这种情况下显示filter_horizontal并不容易,请参见:stackoverflow.com/questions/44714416/…
标签: python django django-2.1