Django“字典更新序列元素#0的长度为1;需要2”

时间:2017-10-09 12:12:42

标签: python django dictionary

我正在努力使多页注册表单工作,我认为我接近使其工作,但我不断收到错误。我正在使用内置用户模型并以一对一的关系扩展它。

这是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})

我不断得到Value错误:字典更新序列元素#0的长度为1; 2是必需的。我认为这个问题在字典“privremeno”中被称为“dadilja_registracija_3”。

这让我发疯,我不知道该怎么办。 Tnx提前

3 个答案:

答案 0 :(得分: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}
编辑:值得一看Django的通用表单视图。他们将为您完成所有这些工作,您可以使用Django自动添加的表单数据集中精力在模板中创建标记:https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/

答案 1 :(得分:0)

像这样更新你的词典

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

答案 2 :(得分:0)

您需要将字典传递给update()

privremeno.update({dadilja: dadilja2.cleaned_data[dadilja]})