0

我的模型中有一个表单,需要使用多对多字段进行验证和保存。

每次我尝试保存它时,我都会回到页面,只是说this field is required

我的模型.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]

我的意见.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))
4

1 回答 1

1

您是否尝试传递blank=True模型字段的构造函数或required=False构造ModelMultipleChoiceField函数?

我知道这blank=True解决了管理面板中表单的问题,但我不知道它是如何映射到ModelForm's 字段的。我假设它被映射到required属性。

于 2010-11-16T00:17:13.890 回答