开发者

Django: "reverse" many-to-many relationships on forms

The easiest example of the sort of relationship I'm talking about is that between Django's Users and Groups. The User table has a ManyToMany field as part of its definition and the Group table is the "reverse" side.

A note about my constraints: I am not working with the Admin interface at all nor is that an option.

Now, onto the programming problem. I need to write a form that is used to edit MyGroup instances, defined simply as the following:

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

I want to be able to have a form page where I can edit both some_field and which users are members of the group. Because I'm working with a model, a ModelForm seems obvious. But I cannot figure out how to get Django to include the users because it is on the reverse side of the User-Group relationship. Ideally, I'd like the display widget for specifying the users to be like the one for specifying permissions that is found on the开发者_开发百科 User and Group pages within Admin.


inline-formsets

do the trick for a foreign key relationship.

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

 guformset = GroupUserInlineFormSet (instance=mygroup)

might point you in the right direction. not sure how this can work with a manytomany relationship.


I never found a great way to do this. I ended up writing custom forms that manage creating the fields and specifying an appropriate queryset on them.

For the display portion of the question, there is a way to use the SelectFilter (a.k.a. horizontal filter) on regular pages. One page with instructions I found is here, and there was another that was helpful, but I can't seem to re-located it.

I'm considering writing up a more thorough guide to both parts of this process. If anyone is interested please let me know, it'll give me the push to actually get it done.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜