我有以下模型:
class Hospital(models.Model):
name = models.CharField(max_length=200)
authorized_users = models.ManyToManyField(User)
在 Hospital 管理页面上显示 filter_horizontal 小部件来管理 ManyToManyField 非常简单:
class HospitalAdmin(admin.ModelAdmin):
filter_horizontal = ('authorized_users', )
admin.site.register(models.Hospital, HospitalAdmin)
但是,我真正想要的是在“更改用户”管理页面上显示该小部件,与用户的其余信息内联。理所当然地,ManyToManyFields 应该可以从两个方向修改 - 为单个医院授权多个用户,上述事实情况很好。然而,要在多家医院授权一个用户,目前的情况需要访问每家医院的管理页面并选择一个有问题的用户 - 荒谬。
我将补充一点,我正在使用 UserProfile 方法来存储有关用户的其他信息(他们是什么类型的用户等)。一种可能的解决方案是让医院的 ManyToManyField 引用 UserProfile 而不是 User。然后我可以添加一个ManyToManyField(Hospital, through=Hospital.authorized_users.through)
to UserProfile
,从而允许我将 filter_horizontal 小部件添加到两端。但是,这是不理想的,因为稍后引用该连接会很痛苦。想象一下,我想获得给定医院的第一个用户授权。而不是hosp_name.authorized_users.all()[0]
,我必须做类似的事情hosp_name.authorized_users.all()[0].user
。我什至不确定如何完成相当于hosp_name.authorized_users.all()
获取完整列表的操作(因为这将返回 s 的列表UserProfiles
,而不是User
s.