2010-10-07 7 views
2

L'exemple le plus simple du type de relation dont je parle est celui entre les utilisateurs et les groupes de Django. La table User a un champ ManyToMany dans sa définition et la table Group est le côté "reverse".Django: "inverse" les relations plusieurs-à-plusieurs sur les formulaires

Une note à propos de mes contraintes: Je ne travaille pas du tout avec l'interface d'administration et ce n'est pas une option.

Maintenant, sur le problème de programmation. Je dois écrire un formulaire qui est utilisé pour modifier les instances de myGroup, défini simplement comme suit:

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

Je veux être en mesure d'avoir une page de formulaire où je peux modifier à la fois some_field et que les utilisateurs sont membres du groupe. Parce que je travaille avec un modèle, un ModelForm semble évident. Mais je n'arrive pas à comprendre comment inclure Django dans les utilisateurs, car c'est au verso de la relation Utilisateur-Groupe. Idéalement, j'aimerais que le widget d'affichage spécifie que les utilisateurs sont comme celui qui spécifie les autorisations qui se trouvent sur les pages Utilisateur et Groupe dans Admin.

Répondre

0

Je n'ai jamais trouvé un excellent moyen de le faire. J'ai fini par écrire des formulaires personnalisés qui gèrent la création des champs et en spécifiant un ensemble de requêtes approprié.

Pour la partie d'affichage de la question, il existe un moyen d'utiliser le SelectFilter (par exemple un filtre horizontal) sur des pages normales. Une page avec les instructions que j'ai trouvées est here, et il y en avait une autre qui a été utile, mais je n'arrive pas à la repérer.

Je considère écrire un guide plus complet aux deux parties de ce processus. Si quelqu'un est intéressé, s'il vous plaît faites le moi savoir, ça me donnera l'impulsion pour le faire.

0

inline-formsets

faire l'affaire pour une relation de clé étrangère.

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

guformset = GroupUserInlineFormSet (instance=mygroup) 

peut vous orienter dans la bonne direction. Je ne sais pas comment cela peut fonctionner avec une relation manytomany.

Questions connexes