开发者

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

开发者 https://www.devze.com 2023-01-19 16:01 出处:网络
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

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

精彩评论

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