Джанго: «перевернуть» отношения «многие ко многим» в формах - PullRequest
2 голосов
/ 07 октября 2010

Самый простой пример такого рода отношений, о которых я говорю, это отношения между пользователями и группами Django.Таблица User имеет поле ManyToMany как часть своего определения, а таблица Group является "обратной" стороной.

Примечание о моих ограничениях: я вообще не работаю с интерфейсом администратора и не является опцией.

Теперь перейдем к проблеме программирования.Мне нужно написать форму, которая используется для редактирования экземпляров MyGroup, которая определяется следующим образом:

class MyGroup( Group ):
  some_field = models.CharField( max_length=50 )

Я хочу иметь страницу формы, на которой я могу редактировать как some_field, так и пользователейявляются членами группы.Поскольку я работаю с моделью, ModelForm кажется очевидным.Но я не могу понять, как заставить Django включать пользователей, потому что это на обратной стороне отношений между группами пользователей.В идеале мне бы хотелось, чтобы отображаемый виджет для указания пользователей был похож на виджет для указания разрешений, которые можно найти на страницах пользователей и групп в Admin.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2011

Я никогда не находил отличный способ сделать это. В итоге я написал собственные формы, которые управляют созданием полей и указанием для них соответствующего набора запросов.

Для отображаемой части вопроса есть способ использовать SelectFilter (например, горизонтальный фильтр) на обычных страницах. Одна страница с инструкциями, которую я нашел, это здесь , и была другая, которая была полезна, но я не могу переместить ее.

Я подумываю написать более подробное руководство для обеих частей этого процесса. Если кому-то интересно, пожалуйста, дайте мне знать, это даст мне толчок к тому, чтобы на самом деле это сделать.

0 голосов
/ 27 декабря 2010

inline-formsets

делают трюк для связи с внешним ключом.

 GroupUserInlineFormSet = inlineformset_factory(MyGroup, User, form=PurchaseOrderEditForm, max_num=100, extra=2, can_delete=False)

 guformset = GroupUserInlineFormSet (instance=mygroup)

может указать вам правильное направление.не уверен, как это может работать со многими отношениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...