сохранение django ManyToMany не действует - PullRequest
0 голосов
/ 15 ноября 2010

У меня есть форма из моей модели, которую необходимо проверить и сохранить с использованием полей ManyToMany.

Каждый раз, когда я пытаюсь сохранить ее, я возвращаюсь на страницу, просто говоря 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 выглядит следующим образом

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

1 Ответ

1 голос
/ 16 ноября 2010

Вы пытались передать blank=True для конструктора поля модели или required=False для конструктора ModelMultipleChoiceField?

Я знаю, что blank=True решает проблему с формой в панели администратора, но я не знаю, как она отображается в полях ModelForm. Я предполагаю, что он отображается на required свойство.

...