尝试调用 cleaned_data() 时出错!Django

0 投票
1 回答
777 浏览
提问于 2025-04-16 01:55

这应该是个简单的解决办法,但我看不出来。请帮帮我。看起来'gorod'在请求中,但当我尝试使用cleaned_data()时,它给我一个KeyError的错误。

KeyError at /ticket/

'gorod'

Request Method:     POST
Request URL:    http://localhost:8000/ticket/
Exception Type:     KeyError
Exception Value:    

'gorod'

Exception Location:     C:\Documents and Settings\POLINOM\web\website\orders\views.py in SaveOrder2, line 93
Python Executable:  C:\Python26\python.exe
Python Version:     2.6.5


Traceback:
File "C:\Python26\lib\site-packages\django\core\handlers\base.py" in get_response
  92.                 response = callback(request, *callback_args, **callback_kwargs)
File "C:\Documents and Settings\POLINOM\web\website\orders\views.py" in ticket
  136.             adr_form=MakeForm2(request)
File "C:\Documents and Settings\POLINOM\web\website\orders\views.py" in MakeForm2
  58.             SaveOrder2(request,form)
File "C:\Documents and Settings\POLINOM\web\website\orders\views.py" in SaveOrder2
  95.     gorod=form.cleaned_data['gorod']

Exception Type: KeyError at /ticket/
Exception Value: 'gorod'

我的表单:

class MumForm(AddressForm):
    CITY_CHOICES = (
                    (0,'August,11 - Washington, BlackCat'),
                    (1,'August,12 - Philadelphia, WorldLiveCafe'),
                    (2,'August,13 - New York, Irving Plaza'),
                    (3,'August,14 - Boston, Middle East'),
                    (4,'August,15 - Montreal, Cabaret Du Musee Juste Pour Rire'),
                    (5,'August,16 - Toronto, Mod club'),
                    (6,'August,17 - Cleveland, Beachland Tavern'),
                    (7,'August,18 - ------------------------'),
                    (9,'August,19 - ------------------------'),
                    (10,'August,20 - Atlanta, Masquerade'),
                    (11,'August,22 - Chicago, Empty Bottle'),
                    (12,'August,23 - Milwaukee, Shank Hall'),
                    (13,'August,24 - Minneapolis, Varsity (promoted by 1st Avenue)'),
                    (14,'August,25 - Winnipeg, Cowboys'),
                    (15,'August,27 - Edmonton, The Starlite Room'),
                    (16,'August,28 - Calgary, The Den'),
                    (17,'August,29 - Vancouver, Commodore Ballroom'),
                    (18,"August,31 - Seattle, Neumo's"),

                    (19,'September,01 - Portland, Howthorne Theatre'),
                    (20,'September,02 - San Francisco, Bottom Of The Hill'),
                    (21,'September,03 - Los Angeles, The Roxy'),
                    (22,'September,04 - Salt Lake City, Urban Lounge'),
                    (23,'September,05 - Denver, Bluebird Theatre'),
                    (24,'September,06 - Kansas City, The Record Bar'),
                    (25,'September,07 - Dallas, The Loft'),
                    (26,"September,08 - Austin, Emo's"),
        )
    gorod = forms.ChoiceField(choices=CITY_CHOICES, label="Выберите город в котором вы хотите пойти на концерт")
    note = forms.CharField(max_length=1500,label=u'Заметка',widget=forms.Textarea)

这个表单是从另一个表单继承过来的,那个表单是:

class AddressForm(forms.Form):
    address = forms.CharField(label=u"Адрес",max_length=200,required=True,widget=forms.TextInput(attrs={'size':60}))
    city = forms.CharField(label=u"Город",max_length=50,required=True)
    country = forms.ChoiceField(label=u"Страна",required=True,choices=COUNTRIES)
    state = forms.ChoiceField(label=u"Штат/Провинция",required=False, choices=StateProvince().get_all_states(), error_messages={'invalid_choice':u'нет среди допустимых значений. Пожалуйста, выберите правильный вариант'}) 
    zip = forms.CharField(label=u"Почтовый код",max_length=10,widget=forms.TextInput(attrs={'size':8}),required=True)
    phone_number = forms.CharField(label=u"Номер телефона",required=False)

我正在处理两个模型:

class Order(models.Model):
    STATUS_CHOICES=[
                    (1, 'Send'),
                    (0, 'Not_send'),                    
                ]
    user=models.ForeignKey(User)
    product=models.ForeignKey(Product)
    status = models.CharField(max_length=1,choices=STATUS_CHOICES)
    country = models.CharField(max_length=2)
    state = models.CharField(max_length=50) 
    zip = models.CharField(max_length=10)
    city = models.CharField(max_length=50)
    street = models.CharField(max_length=200)
    phone=models.CharField(max_length=20)


    def __unicode__(self):
        return 'Order by ' + self.user

class TicketProp(models.Model):
    order=models.ForeignKey(Order)
    note=models.CharField(max_length=1500)
gorod=models.CharField(max_length=2)

1 个回答

1

也许你的 AddressForm 类缺少了 gorod 这个字段?这个表单会根据表单里的字段来填充 .cleaned_data 属性(注意后面没有 ()!),比如在当前的 django.forms 源代码中,你可以在第274行看到

for name, field in self.fields.items():

而在循环的主体部分,.cleaned_data 字典就是在这里被填充的。

那么你的 AddressForm 代码是什么样的呢(还有它应该配合的模型)……?

撰写回答