2016-12-23 16 views
1

私はすべてが最後に保存される複数のステップフォームをやっています。私のモデルでは、m2mのチェックボックスフィールドがあり、最後のステップでフォームデータを取得するためにdjango Sessionsを使用しています。m2mフィールドセッションをフォームから別のフォームに保存するにはどうすればよいですか?

最後のフォームを送信すると、m2mフィールド(チェックボックス)が保存されないという問題があります。ここで

が私の見解はファイルです:

views.py

def step1(request): 
    initial={'name': request.session.get('name', None), 'checkbox': request.session.get('checkbox', (False,))} #cookies 
    form = FormOneForm(request.POST or None, initial=initial) 
    if request.method == 'POST': 
     if form.is_valid(): 
      request.session['name'] = form.cleaned_data['name'] 
      request.session['checkbox'] = form.cleaned_data.get('checkbox') 
      return HttpResponseRedirect(reverse('step2')) 
    return render(request, 'step1.html', {'form': form}) 

def step2(request): 
    form = FormTwoForm(request.POST or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      formtwo = form.save(commit=False) 
      formone2 = FormOne.objects.create(checkbox=request.session.get('checkbox')) #error is here 
      formone = FormOne.objects.create(name=request.session['name']) 
      formtwo.owner = formone 
      formtwo.save() 
      formone2.save_m2m() 
      return HttpResponseRedirect(reverse('step3')) 

    return render(request, 'step2.html', {'form': form}) 

models.py

class Font(models.Model): 
    font_name = models.CharField(max_length=100) 
    font_family = models.CharField(max_length=100) 
    font_link = models.CharField(max_length=100) 
    ... 

class FormOne(models.Model): 
    name = models.CharField(max_length=40) 
    checkbox = models.ManyToManyField(Font, blank=True) 
    ... 

class FormTwo(models.Model): 
    owner = models.ForeignKey(FormOne) 
    name = models.CharField(max_length=40) 
    ... 

このコードは、私は、このエラーを与える:

'checkbox' is an invalid keyword argument for this function 

私は実現しようとしていることをどのように達成できますか?

答えて

1

は、最初のオブジェクトを保存しよう:

formone2 = FormOne.objects.create(name=request.session['name']) 
formone2.checkbox.add(request.session.get('checkbox') 

問題は、あなたが使用する前に多対多の関係をオブジェクトを保存する必要があるということです。 docsを参照してください:

それは

を保存されていますまで、パブリケーションに関連付けることができません
関連する問題