2010-11-15 26 views
0

J'ai un formulaire de mon modèle qui doit être validé et enregistré en utilisant ManyToMany Fields.enregistrer django ManyToMany non valide

Chaque fois que j'essaie de l'enregistrer, je me jette revenir à la page, juste dire this field is required

Mon models.py

class HuntingReport(models.Model): 
    user = models.ForeignKey(User, related_name='User') 
    outfitter = models.ForeignKey(User, related_name='Outfitter', null=True, blank=True) 
    date_travel_started = models.DateField(blank=True, null=True) 
    date_travel_ended = models.DateField(null=True, blank=True) 
    title = models.CharField(max_length=50) 
    report = models.TextField() 
    wish_list = models.ManyToManyField(Specie) 
    bag_list = models.ManyToManyField(Trophies) 

    def __unicode__(self): 
     return self.title 

Mon forms.py se présente comme suit

class HuntingReportForm(ModelForm): 
    date_travel_started = forms.DateField(widget=extras.SelectDateWidget(years=range(1970,2010))) 
    date_travel_ended = forms.DateField(widget=extras.SelectDateWidget(years=range(1970,2010))) 
    wish_list = forms.ModelMultipleChoiceField(queryset=Specie.objects.all(), widget=FilteredSelectMultiple("verbose name", is_stacked=False)) 
    bag_list = forms.ModelMultipleChoiceField(queryset=Trophies.objects.all(), widget=FilteredSelectMultiple("verbose name", is_stacked=False)) 

    class Meta: 
     model = HuntingReport 
     exclude = ['user'] 

    def __init__(self, user, *args, **kwargs): 
     super(HuntingReportForm, self).__init__(*args, **kwargs) 

     users = User.objects.filter(userprofile__outfitter=True) 
     self.fields['outfitter'].choices = [('', '')] + [(user.pk, user.get_full_name()) for user in users] 

mes vues.py

def create(request, template_name='reports/new.html'): 
    if request.method == 'POST': 
     form = HuntingReportForm(request.POST, request.FILES) 
     if form.is_valid(): 
      newform = form.save(commit=False) 
      newform.user = request.user 
      newform.save_m2m() 
      return HttpResponseRedirect('/hunting-reports/') 
    else: 
     form = HuntingReportForm(request.user) 

    context = { 'form':form, } 

    return render_to_response(template_name, context, 
     context_instance=RequestContext(request)) 
+0

Quel champ est invalide? Quel champ est le champ M2M? –

+0

wish_list et bag_list sont les deux champs ManyToMany. J'ai ajouté les modèles – ApPeL

Répondre

1

Avez-vous essayé de transmettre blank=True pour le constructeur du champ de modèle, ou required=False pour le constructeur ModelMultipleChoiceField?

Je sais que blank=True résout le problème pour le formulaire dans le panneau d'administration, mais je ne sais pas comment il est mappé aux champs de ModelForm. Je suppose qu'il est mappé à la propriété required.

+0

Merci, je vais l'essayer et vous le faire savoir. – ApPeL