2009-12-23 7 views
6

Salut, j'ai un modèle qui a 2 beaucoup de champs. l'un est un champ m2m standard qui n'utilise pas de tables à travers tandis que l'autre est un peu plus compliqué et a une table à travers. J'utilise Django forms.modelform pour afficher et enregistrer les formulaires. Le code que je dois enregistrer le formulaire estDjango Forms save_m2m

if form.is_valid(): 
     f = form.save(commit=False) 
     f.modified_by = request.user 
     f.save() 
     form.save_m2m() 

Lorsque je tente de sauver la forme que je reçois l'erreur suivante:

Impossible de définir des valeurs sur une ManyToManyField qui spécifie un modèle intermédiaire.

Je sais que cela se produit lorsque je fais le formulaire.save_m2m() à cause de la table through. Ce que je voudrais faire, c'est de dire à Django d'ignorer le champ m2m avec la table à travers, mais de sauvegarder le champ m2m sans la table à travers. Je peux alors continuer à enregistrer manuellement les données pour le champ de table à travers.

Merci

Répondre

0

vous ne pouvez pas enregistrer le m2m « sans la table par »

les données que vous souhaitez enregistrer est stockée dans la table à travers (et seulement dans le tableau par)

4

Si vous avez un modèle avec plusieurs champs, un est fait avec une table à travers et l'autre est une relation régulière à plusieurs sans une table à travers. Vous pouvez toujours utiliser save_m2m() pour enregistrer le fichier régulier. Ajoutez simplement les champs à travers à votre liste d'exclusion sur votre formulaire.

Ajouter dans votre classe de formulaire:

class Meta: 
    model = YourModel 
    exclude = ('m2mthroughfield',) 
Questions connexes