【问题标题】:Django "dictionary update sequence element #0 has length 1; 2 is required"Django“字典更新序列元素#0的长度为1;需要2”
【发布时间】:2018-03-20 15:31:51
【问题描述】:

我正在尝试使多页注册表单正常工作,我认为我已接近正常工作,但我不断收到错误消息。我正在使用内置的用户模型并通过一对一的关系对其进行扩展。

这是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 是必需的。问题出在我所引用的字典“privremeno”中称为“dadilja_registracija_3”的视图中。

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

【问题讨论】:

  • 导致此错误的步骤是什么(调用了哪个视图/表单)。发布堆栈跟踪 - 并指出堆栈跟踪中指示了代码中的哪些行。
  • 我编辑了原帖。问题是在我 higlited 的字典“privremeno”中称为“dadilja_registracija_3”的视图。

标签: python django dictionary


【解决方案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/

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      像这样更新你的字典

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

      【讨论】:

        猜你喜欢
        • 2013-07-10
        • 2020-12-14
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        • 2018-11-07
        • 2015-02-22
        • 2021-04-01
        相关资源
        最近更新 更多