2009-12-30 5 views
1

J'ai créé un formulaire basé sur un modèle. Le modèle a un champ many2many. J'ai défini le champ comme ceci:django many2many field make non requis

contacts = models.ManyToManyField(Contact, blank=True, null=True) 

`m se demander maintenant pourquoi la forme générée dit que ce champ ne peut être vide. Je reçois toujours le message d'erreur "Ce champ est obligatoire.", Lorsque je ne sélectionne pas un contact pour le champ de contacts.

Qu'est-ce qui ne va pas?

Répondre

3

Dans votre formulaire de déclaration marque ce domaine comme required=False

class MyForm(forms.ModelForm): 
    contacts=forms.ModelMultipleChoiceField(queryset=Contact.objects.all(),required=False) 
    class Meta: 
    model=MyModel 
+0

oui cela fonctionne. Merci! –

+0

savez-vous si je veux filtrer le contact avec la restriction qu'il devrait afficher uniquement liée à l'instance actuelle de la forme, je veux dire, il devrait afficher les contacts liés à Business pas tous. pour le nouveau formulaire doit être vide, queryset = Contact.objects.filter (Contact.objects.filter (self.instance. ????) – shahjapan

1

Peut-être que vous avez fait syncdb avant d'ajouter blank=True, null=True?

syncdb crée uniquement des tables si elles n'existent pas dans la base de données. Les modifications apportées aux modèles doivent être effectuées manuellement dans la base de données directement avec SQL ou à l'aide d'un outil de migration tel que South.

Bien sûr, si vous êtes encore au début du développement, il sera plus facile de supprimer la base de données et d'exécuter à nouveau syncdb.

+0

Non, je ne cours syncdb. J'ai aussi lancé django evolution http://code.google.com/p/django-evolution/. Je pensais aussi que c'est le problème. Peut-être qu'une goutte est une bonne idée. –

0

Votre utilisation de null = True est source de confusion ici. Un champ manyToMany aboutit à une troisième table reliant un modèle à un autre. par exemple.

Business <-> Contact 

Si business.contacts est vide, aucun enregistrement sont entrées dans ce tableau. null=True me feraient penser que vous avez l'intention de NULL enregistrements à ajouter à cette table, ce qui ne semble pas valide.

Généralement, vous laissez tous les deux de ces attributs.

+0

Ok mais si je laisse ces deux attributs désactivés, ils sont obligatoires. En fait, ce n'est pas un gros problème si l'utilisateur doit ajouter au moins une relation m2m, mais il serait encore intéressant comment cela pourrait être accompli. –

Questions connexes