Застрял пост кода () для myform (forms.Form) в движке приложения, встроенный Django - PullRequest
0 голосов
/ 21 января 2011

Я нашел способ, но не могу получить данные из моей формы.Ниже моя форма и ее метод post ().проверка работает нормально, но как получить «очищенные» данные в версии django для движка приложений?

def get_type(): 
    return [(str(type.key()), type.name) for type in GreType.all()] 

class LatField(forms.Field):
    def clean(self,value):
        x = None
        try:
            x = float(value)
            if x > 90.0 or x < -90.0:
                x = None
        except:
            x = None
        if x is None:
            raise forms.ValidationError("Latitude should be a number between 90.00 and -90.00")

class LonField(forms.Field):
    def clean(self,value):
        x = None
        try:
            x = float(value)
            if x > 180.0 or x < -180.0:
                x = None
        except:
            x = None
        if x is None:
            raise forms.ValidationError("Longitude should be a number between 180.00 and -180.00")

class LocationForm(forms.Form):
    type = forms.ChoiceField(choices=get_type())
    name = forms.CharField(max_length=100)
    desc = forms.CharField(widget=forms.Textarea(), required=False)
    lat = LatField()
    lon = LonField()

class LocationHandler(webapp.RequestHandler):
  def get(self):
    template_data = { 'form' : LocationForm() }
    template_path = os.path.join(os.path.dirname(__file__), '../template/location.html')
    self.response.headers['Content-Type'] = 'text/html'
    self.response.out.write(template.render(template_path, template_data))

  def post(self):
    data = LocationForm(data=self.request.POST)
    if data.is_valid():
        # what to do here?
        self.redirect('/locations')

мои подпрограммы проверки, вероятно, имеют некоторую избыточность, но я не совсем уверен насчет области Python

Я передал форму на основе модели ( предыдущий вопрос ), чтобы получить отдельные поля lat и lon.)

1 Ответ

0 голосов
/ 23 января 2011

Очищенные данные доступны в self.cleaned_data.Этот пример работал правильно:

class BlogCreateForm(forms.ModelForm):
    class Meta:
        model   = Blog
        exclude = ('author',)

    def clean_slug(self):
        '''Prevent duplicate blogs with equal key names'''
        # blog with given url address already exists
        if self.Meta.model.get_by_key_name(self.cleaned_data['slug']):
            raise forms.ValidationError("Blog with url '%s' already exists" %
                                         self.cleaned_data['slug'])
        return self.cleaned_data['slug']

Замените return self.cleaned_data['slug'] на return self.clean_data['slug'], если вы использовали встроенную версию Django.

Попробуйте использовать http://gaeframework.com - Python веб-фреймворк, разработанный для Google App Engine

...