Настройка администратора Django filter_horizontal
предоставляет хороший виджет для редактирования отношения многие ко многим. Но это особая настройка, которая требует список полей, поэтому она доступна только в модели (admin для), которая определяет ManyToManyField
; Как я могу получить тот же виджет (* для администратора) другая модель, читая отношения в обратном направлении?
Мои модели выглядят так (не стесняйтесь игнорировать сложность User
/ UserProfile
; хотя это реальный вариант использования):
class Site(models.Model):
pass
class UserProfile(models.Model):
user = models.OneToOneField(to=User,unique=True)
sites = models.ManyToManyField(Site,blank=True)
Я могу получить красивый виджет в форме администратора для UserProfile
с
filter_horizontal = ('sites',)
но не вижу, как получить эквивалент на Site
admin.
Я также могу получить неполный путь, добавив строку к SiteAdmin
, определенную как:
class SiteAccessInline(admin_module.TabularInline):
model = UserProfile.sites.through
Это окольный и неудобный, хотя; виджет совсем не интуитивен для простого управления отношением «многие ко многим».
Наконец, здесь описан трюк , который включает определение другого ManyToManyField
на Site
и проверку того, что он указывает на ту же таблицу базы данных (и прыжок через некоторые обручи, потому что Django на самом деле не предназначен иметь разные поля на разных моделях, описывающих одни и те же данные). Я надеюсь, что кто-то может показать мне что-нибудь почище.