Django admin 以多对多关系显示 table 中的所有记录,而不是相关字段
Django admin shows all the records in the table in a many to many relationship, instead of related fields
所以在这个项目中有组织。每个用户都可以是多个组织中的经理。每个用户也可以是多个组织的成员。
当我转到 django admin 中的“用户页面”时(例如,我单击用户而不是单击该用户),我希望看到一个组织列表,该用户是经理,以及另一个组织列表该用户是会员。
相反,对于任何用户,我都会在管理和成员列表中看到所有组织的列表,如下图所示。例如。该列表未按用户 ID 过滤。
我做错了什么?我怎样才能解决这个问题?谢谢。
我的用户管理员是这样的:
@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
form = UserChangeForm
add_form = UserCreationForm
fieldsets = (
...
(_("Managerships"), {"fields": ("managerships", )}),
(_("Memberships"), {"fields": ("memberships", )}),
)
list_display = ["username", "name", "is_superuser"]
search_fields = ["name"]
我的用户模型是这样的:
class User(AbstractUser):
...
managerships = models.ManyToManyField(Organization, related_name='managerships',blank=True)
memberships = models.ManyToManyField(Organization, related_name='memberships',blank=True)
...
组织模型如下:
class Organization(models.Model):
name = models.CharField(max_length=200)
...
这只是 Django 管理员默认显示 m2m 字段的一种方式。您会看到整个组织 table,并且您可以 select 通过在按住 Control/Command 的同时对行进行 select 来 select 用户所属的组织(如框下方所写)。
不过,使用多个-select框可能不方便。有一个选项 filter_horizontal
提供替代 UX(还有一个 filter_vertical
)。 Docs
@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
...
filter_horizontal = ('managerships', 'memberships')
您仍然会在左侧看到整个组织 table,selected 组织将显示在右侧。
所以在这个项目中有组织。每个用户都可以是多个组织中的经理。每个用户也可以是多个组织的成员。
当我转到 django admin 中的“用户页面”时(例如,我单击用户而不是单击该用户),我希望看到一个组织列表,该用户是经理,以及另一个组织列表该用户是会员。
相反,对于任何用户,我都会在管理和成员列表中看到所有组织的列表,如下图所示。例如。该列表未按用户 ID 过滤。
我做错了什么?我怎样才能解决这个问题?谢谢。
我的用户管理员是这样的:
@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
form = UserChangeForm
add_form = UserCreationForm
fieldsets = (
...
(_("Managerships"), {"fields": ("managerships", )}),
(_("Memberships"), {"fields": ("memberships", )}),
)
list_display = ["username", "name", "is_superuser"]
search_fields = ["name"]
我的用户模型是这样的:
class User(AbstractUser):
...
managerships = models.ManyToManyField(Organization, related_name='managerships',blank=True)
memberships = models.ManyToManyField(Organization, related_name='memberships',blank=True)
...
组织模型如下:
class Organization(models.Model):
name = models.CharField(max_length=200)
...
这只是 Django 管理员默认显示 m2m 字段的一种方式。您会看到整个组织 table,并且您可以 select 通过在按住 Control/Command 的同时对行进行 select 来 select 用户所属的组织(如框下方所写)。
不过,使用多个-select框可能不方便。有一个选项 filter_horizontal
提供替代 UX(还有一个 filter_vertical
)。 Docs
@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
...
filter_horizontal = ('managerships', 'memberships')
您仍然会在左侧看到整个组织 table,selected 组织将显示在右侧。