2017-10-09 11 views
0

私は動作するように複数ページの登録フォームを作成しようとしています。私は組み込みのユーザーモデルを使用しており、それを1対1の関係で拡張しています。Django "辞書更新シーケンス要素#0は長さが1; 2が必要です"

これはmodels.pyファイルです:

class Dadilja(models.Model): 
    korisnik = models.OneToOneField(User) 
    ime = models.CharField(max_length=256) 
    prezime = models.CharField(max_length=256) 
    datum_rođenja = models.DateField(null=True, blank=True) 
    mjesto = models.CharField(max_length=256) 
    mjesto_obavljanja = models.CharField(max_length=256) 
    broj_telefona = models.CharField(max_length=20) 

    slika_profila = models.ImageField(upload_to="slika_profila", blank=True) 
    iskustvo = models.CharField(max_length=256) 
    dostupna = models.CharField(max_length=256) 
    about = models.CharField(max_length=256) 
    broj_djece = models.PositiveIntegerField() 
    dodatno = models.CharField(max_length=256) 
    cijena = models.PositiveIntegerField() 

forms.py:

class Forma1(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput()) 
     class Meta(): 
      model = User 
      fields = ("username", "email", "password") 


class Forma2(forms.ModelForm): 
    datum_rođenja = forms.DateField(widget=forms.SelectDateWidget(years=reversed(range(1930,2000)))) 
    class Meta(): 
     model = Dadilja 
     fields = ("ime", "prezime", "datum_rođenja", "mjesto", "mjesto_obavljanja", "broj_telefona") 

class Forma3(forms.ModelForm): 
    class Meta(): 
     model = Dadilja 
     fields = ("slika_profila", "iskustvo", "dostupna", "about", "broj_djece", "dodatno", "cijena") 

そして最も重要な、views.pyファイル:

def dadilja_registracija_3(request): 
    dadilja2 = Forma3(data=request.POST) 
    if request.method == "POST" and dadilja2.is_valid(): 
     print(dadilja2.cleaned_data) 
     korisnik = request.session['form_data_page_1'] 
     dadilja1 = request.session['form_data_page_2'] 
     user = User(username=korisnik['username'], email=korisnik['email'], password=korisnik['password']) 
     user.set_password(user.password) 
     user.save() 
 privremeno = {} 
     for dadilja in dadilja2.cleaned_data: 
      privremeno.update(dadilja) 
 dadilja1 = Dadilja(korisnik=user, ime=dadilja1['ime'], 
      prezime=dadilja1['prezime'], 
      datum_rođenja=dadilja1['datum_rođenja'], 
      mjesto=dadilja1['mjesto'], 
      mjesto_obavljanja=dadilja1['mjesto_obavljanja'], 
      slika_profila=privremeno['slika_profila'], 
      iskustvo=privremeno['iskustvo'], 
      about=privremeno['about'], 
      broj_djece=privremeno['broj_djece'], 
      dodatno=privremeno['dodatno'], 
      cijena=privremeno['cijena']) 

     if 'slika_profila' in request.FILES: 
      dadilja.slika_profila = request.FILES['slika_profila'] 

     dadilja1.save() 

    else: 
     dadilja2 = Forma3() 
    return render(request, 'accounts/dadilja3.html', {'dadilja2' : dadilja2}) 

私は続けている値のエラー:辞書の更新シーケンス要素#0には長さ1があります。 2が必要です。問題は、私がhiglited辞書 "privremeno"の "dadilja_registracija_3"と呼ばれる視野にあります。

これは私を狂っている、私はもう何をすべきか分からない。あなたが気づいているよう事前にTNXは

+3

このエラー(ビュー/フォームが呼び出される)につながる手順は何ですか?スタックトレースをポストし、スタックトレースにコード内のどの行が表示されているかを指摘します。 – Risadinha

+0

元の投稿を編集しました。問題は、私がhiglited辞書 "privremeno"の "dadilja_registracija_3"と呼ばれる視野にあります。 –

答えて

1

これは、動作しません:

privremeno = {} 
for dadilja in dadilja2.cleaned_data: 
    privremeno.update(dadilja) 

あなたはどちらかだけで、このようcleaned_dataのすべてを追加することができます。

privremeno = copy(dadilja2.cleaned_data) 

または

privremeno = {} 
privremeno.update(dadilja2.cleaned_data) 

または

privremeno = {} 
for key,value in dadilja2.cleaned_data: 
    privremeno[key] = value 

または

privremeno = {key:value for key,value in dadilja2.cleaned_data} 

EDIT:それはジャンゴの一般的な形式の景色を見てみた価値があります。彼らはあなたのためのすべてのこれを行いますと、あなたは自動的にジャンゴによって追加されたフォームデータを使用して、テンプレートでマークアップを作成することに集中することができます:https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/

+0

それは問題を解決しました、ありがとう! –

0

はあなたが合格する必要があり、この

privremeno = {} 
for k, v in dadilja2.cleaned_data.items(): 
    privremeno.update({k:v}) 
0

のようなあなたの辞書を更新します辞書からupdate()

privremeno.update({dadilja: dadilja2.cleaned_data[dadilja]}) 
関連する問題