2010-11-15 106 views
0

我從我的模型中有一個表單,需要使用ManyToMany字段進行驗證和保存。保存django ManyToMany無效

每次我試圖挽救它,我得到後仰頁面,只是說this field is required

我的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 

我forms.py如下所示

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] 

my views.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

哪個字段無效? M2M領域是哪個領域? – 2010-11-15 10:39:25

+0

wish_list和bag_list都是ManyToMany字段。我已經添加了模型 – ApPeL 2010-11-15 10:52:02

回答

1

您是否嘗試過爲模型字段的構造函數傳遞blank=True,或者ModelMultipleChoiceField的構造函數是否爲required=False

我知道blank=True解決了管理面板中表單的問題,但我不知道它是如何映射到ModelForm的字段。我假設它被映射到required屬性。

+0

謝謝,我會試試看,並讓你知道。 – ApPeL 2010-11-16 12:20:30