私は次のモデルを持っています:
class Hospital(models.Model):
name = models.CharField(max_length=200)
authorized_users = models.ManyToManyField(User)
ManyToManyFieldを管理するためにHospital管理ページにfilter_horizontalウィジェットを表示するのは非常に簡単です。
class HospitalAdmin(admin.ModelAdmin):
filter_horizontal = ('authorized_users', )
admin.site.register(models.Hospital, HospitalAdmin)
ただし、私が本当に望んでいるのは、そのウィジェットを「ユーザーの変更」管理ページに、残りのユーザー情報と同じように表示することです。ManyToManyFieldsが両方向から変更可能である必要があるのは当然のことです。1つの病院で複数のユーザーを承認するには、上記の事実上の状況で問題ありません。ただし、複数の病院で1人のユーザーを承認するには、現在の状況では、各病院の管理ページにアクセスして、問題の1人のユーザーを選択する必要があります。
UserProfile方法論を使用して、ユーザーに関する追加情報(ユーザーのタイプなど)を保存していることを追加します。考えられる解決策の1つは、病院のManyToManyFieldがUserではなくUserProfileを参照するようにすることです。次に、にを追加しManyToManyField(Hospital, through=Hospital.authorized_users.through)
てUserProfile
、filter_horizontalウィジェットを両端に追加できるようにします。ただし、後で接続を参照するのは面倒なので、これは理想的ではありません。特定の病院の最初のユーザーを承認したいとします。ではなくhosp_name.authorized_users.all()[0]
、私はのようなことをしなければならないでしょうhosp_name.authorized_users.all()[0].user
。完全なリストを取得するのと同等の方法をどのように実行するかさえわかりません(これにより、sではなくのhosp_name.authorized_users.all()
リストが返されます。UserProfiles
User