开发者

saving django ManyToMany not valid

开发者 https://www.devze.com 2023-01-25 07:07 出处:网络
I have a form from my model that needs to be validated and saved making use of ManyToMany Fields. Everytime I t开发者_如何学运维ry and save it, I get thrown back to the page, just saying this field i

I have a form from my model that needs to be validated and saved making use of ManyToMany Fields.

Everytime I t开发者_如何学运维ry and save it, I get thrown back to the page, just saying this field is required

My 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

My forms.py looks as follows

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))


Did you try passing blank=True for model field's constructor, or required=False for the ModelMultipleChoiceField's constructor?

I know that blank=True solves the problem for the form in the admin panel, but I don't know how it gets mapped to the ModelForm's fields. I'm assuming that it gets mapped to required property.

0

精彩评论

暂无评论...
验证码 换一张
取 消