3

Google App Engine のフォーム検証を行いたいのですが、方法がわかりません。私はこのように試しました:

from google.appengine.ext.db import djangoforms
from django import newforms as forms


class SurveyForm(forms.Form):
    occupations_choices = (
    ('1', ""),
    ('2', "Undergraduate student"),
    ('3', "Postgraduate student (MSc)"),
    ('4', "Postgraduate student (PhD)"),
    ('5', "Lab assistant"),
    ('6', "Technician"),
    ('7', "Lecturer"),
    ('8', "Other" )
    )

howreach_choices = (
    ('1', ""),        
    ('2', "Typed the URL directly"),
    ('3', "Site is bookmarked"),
    ('4', "A search engine"),
    ('5', "A link from another site"),
    ('6', "From a book"),
    ('7', "Other")
    )

boxes_choices = (
    ("des", "Website Design"),
    ("svr", "Web Server Administration"),
    ("com", "Electronic Commerce"),
    ("mkt", "Web Marketing/Advertising"),
    ("edu", "Web-Related Education")
    )

name = forms.CharField(label='Name', max_length=100, required=True)
email = forms.EmailField(label='Your Email Address:')
occupations = forms.ChoiceField(choices=occupations_choices, label='What is your occupation?')
howreach = forms.ChoiceField(choices=howreach_choices, label='How did you reach this site?')
# radio buttons 1-5
rating = forms.ChoiceField(choices=range(1,6), label='What is your occupation?', widget=forms.RadioSelect)

boxes = forms.ChoiceField(choices=boxes_choices, label='Are you involved in any of the following? (check all that apply):', widget=forms.CheckboxInput)
comment = forms.CharField(widget=forms.Textarea, required=False)

そして、私はそれを次のように表示したかった:

template_values = {
        'url' : url,
        'url_linktext' : url_linktext,
        'userName' : userName,

'item1' : アンケートフォーム() }

そして、私はこのエラーメッセージを持っています:

トレースバック (最後の最後の呼び出し): ファイル "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp_ init _.py"、515 行目、call handler.get(*groups) ファイル "C:\ Program Files\Google\google_appengine\demos\b00213576\main.py"、144 行目、get self.response.out.write(template.render(path, template_values)) ファイル "C:\Program Files\Google\google_appengine\ google\appengine\ext\webapp\template.py", line 143, render return t.render(Context(template_dict)) File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\template. py"、183 行目、wrap_render return orig_render(context) File "C:\Program Files\Google\google_appengine\lib\django\django\ template_init_.py"、168 行目、レンダー return self.nodelist.render(context) ファイル "C:\Program Files\Google\google_appengine\lib\django\django\template_ init _.py"、705 行目、レンダー ビット.append(self.render_node(node, context)) ファイル "C:\Program Files\Google\google_appengine\lib\django\django\template_ init _.py"、718 行目、render_node 内 return(node.render(context) ) ファイル "C:\Program Files\Google\google_appengine\lib\django\django\template\defaulttags.py"、209 行目、レンダリングで self.nodelist_true.render(context) ファイル "C:\Program Files\Google\ google_appengine\lib\django\django\ template_init_.py"、705 行目、render bits.append(self.render_node(node, context)) ファイル内 "C:\Program Files\Google\google_appengine\lib\django\django\template_ init _.py"、718 行目、render_node return(node.render(context))ファイル「C:\Program Files\Google\google_appengine\lib\django\django\template_init_.py 」、768行目、render return self.encode_output(output)ファイル"C:\Program Files\Google\google_appengine\lib\django\django\template_ init _.py"、757 行目、encode_output return str(output) File "C:\Program Files\Google\google_appengine\lib\django\ django\newforms\util.py"、26 行目、str return self.unicode内行 232、 Unicode 値 = 値。
() ファイル "C:\Program Files\Google\google_appengine\lib\django\django\newforms\util.py"、26 行目、strで 自己を返します。unicode ().encode(settings.DEFAULT_CHARSET) ファイル "C:\Program Files\Google\google_appengine\lib\django\django\newforms\widgets.py"、246 行目、ユニコードで u' を返す

    \n%s\n
' % u'\n'.join([u'
  • %s
  • ' % w for w in self]) File "C:\Program Files\Google\google_appengine\lib\django\django\newforms\widgets.py", line 238, in iter yield RadioInput(self.name, self.value, self.attrs.copy()、choice、i) ファイル "C:\Program Files\Google\google_appengine\lib\django\django\newforms\widgets.py"、212 行目、init self.choice_value = smart_unicode(choice[ 0]) TypeError: 'int' オブジェクトは添え字を付けられません

    別のケースでこの検証を行う方法を知っていますか?

    私はこの種のものを使ってそれをやろうとしました:

    class ItemUserAnswer(djangoforms.ModelForm):
    

    クラス メタ: モデル = UserAnswer

    しかし、このフォームにラベルを追加する方法がわからず、1 行で表示されます。何か提案はありますか?

    なぜそれがまだ機能していないのか、私を夢中にさせてくれてありがとう:/

    4

    2 に答える 2

    1

    組み込みメソッドis_valid()は検証する必要があります。フォームを送信するときは、HTTP POST で行います

        def post(self):
        try:
            upload_files = self.get_uploads('file')  # 'file' is file upload field in the form
            if upload_files:
                blob_info = upload_files[0]  
        except:
            self.response.out.write('File not uploaded')        
        try:
            data = AForm(data=self.request.POST)
            if data and data.is_valid():
                # Save the data, and redirect to the view page
                entity = data.save(commit=False)
                entity.added_by = users.get_current_user()
                entity.put()
                if upload_files:            
                    im = Image(reference=entity) 
                    im.primary_image = blob_info.key()
                    im.put()
                    entity.put()
                    self.redirect('/serve/%s' % blob_info.key())
            else:
                # Reprint the form
                self.response.out.write('<html><body>'
                                        '<form method="POST" '
                                        'action="/">'
                                        '<table>')
                self.response.out.write(data)
                self.response.out.write('</table>'
                                        '<input type="submit">'
                                        '</form></body></html>')
        except:
            self.redirect('/serve/%s' % blob_info.key())
    
    于 2010-12-22T23:49:25.930 に答える
    0

    これが問題です

    Rating = forms.ChoiceField(choices = range(1,6)、label ='あなたの職業は何ですか?'、widget = forms.RadioSelect)

    choicesは整数値に設定されます。

    于 2010-12-22T17:48:30.940 に答える