Десятичное значение в форме не проверяет Django - PullRequest
0 голосов
/ 11 января 2012

Вот моя форма. Я пытаюсь передать пользователю два поля символов и две координаты, чтобы их можно было превратить в объекты.Я только что выяснил валидацию в полях char, но теперь десятичные поля работать не будут.Любые предложения?

from django import forms


class SubmitForm(forms.Form):
title = forms.CharField(max_length=100)
story = forms.CharField(max_length=3000)
lat = forms.DecimalField(max_digits=25, decimal_places=20)
lng = forms.DecimalField(max_digits=25, decimal_places=20)

def clean_title(self):  
    if len(self.cleaned_data['title']) < 4:
        raise forms.ValidationError("Enter your full title")
    # Always return the cleaned data
    return self.cleaned_data['title']


def clean_story(self):
    if len(self.cleaned_data['story']) < 4:
        raise forms.ValidationError("Enter your full story")
    # Always return the cleaned data
    return self.cleaned_data['story']

def clean_lng(self):
    if self.cleaned_data['lng'] == 0.0:
        raise forms.ValidationError("Enter your full story")    
    return self.cleaned_data['lng']

def clean_lat(self):
    if self.cleaned_data['lat'] == 0.0:
        raise forms.ValidationError("Enter your full story")
    # Always return the cleaned data    
    return self.cleaned_data['lat']     



def clean(self):
    cleaned_data = self.cleaned_data
    return cleaned_data

Вот мое мнение

def test(request):
ctxt = {}
if request.method == 'POST':
        form = SubmitForm(request.POST) # A form bound to the POST data 
        if form.is_valid():
            lat1 = form.cleaned_data['lat']
            lng1 = form.cleaned_data['lng']
            # title1 = form.cleaned_data['title']
            titlepost = form.cleaned_data['title']
            story1 = form.cleaned_data['story']
            ctxt = {'titlehere':titlepost}
            catid = "test1234"
            cat = Category(category=catid)
            cat.full_clean()
            cat.save()
            marker = Marker(lat=lat1, lng=lng1,category=cat, title=titlepost, story=story1)
            marker.full_clean()
            marker.save()
            return render_to_response('home.html', ctxt, context_instance=RequestContext(request))          

        else:
            return render_to_response('test.html', ctxt, context_instance=RequestContext(request))          
else:
        now = datetime.datetime.now()
        form = SubmitForm()
        latest_marks = Marker.objects.all().order_by('-submitted')[0:10]
        ctxt = {
        'marks':latest_marks,
        'now':now.date(),
        'form': form,
        }

        return render_to_response('test.html', ctxt, context_instance=RequestContext(request))

Почему-то каждый раз, когда я отправляю форму, я получаю это сообщение об ошибке

Не совсем уверен, что происходит,Все еще довольно плохо знаком с Джанго.Буду признателен за любую помощь.

Редактировать: добавить в двоеточия я пропустил.Ошибка по-прежнему состоит

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Вы пропускаете некоторые двоеточия после ваших операторов if в чистых методах вашей формы.

1 голос
/ 11 января 2012

Рассматривали ли вы использование Modelforms ?

Вы можете упростить свой код, просто используя форму модели для модели маркера (меньше дублирования кода, меньше кода вообще для создания модели ...)

FYI: Вы можете отправить min_length в CharField и бесплатно получить проверку len ():)

class SubmitForm(forms.Form):
     title = forms.CharField(max_length=100, min_length=4)
0 голосов
/ 11 января 2012

Почему-то каждый раз, когда я отправляю форму, я получаю это сообщение об ошибке

Я не вижу ошибку!Но я попробовал это, и все работает нормально.

import math
class MyForm(forms.Form):
    title = forms.CharField(max_length=100, min_length=4)
    story = forms.CharField(max_length=3000, min_length=4)
    lat = forms.DecimalField(max_digits=25, decimal_places=20)
    lng = forms.DecimalField(max_digits=25, decimal_places=20)

    def clean_lat(self):
        lat = self.cleaned_data['lat']
        if math.ceil(float(lat)) <= 0:
            raise forms.ValidationError("Enter your full story")
        return self.cleaned_data['lat']

    def clean_lng(self):
        lng = self.cleaned_data['lng']
        if math.ceil(float(lng)) <= 0:
            raise forms.ValidationError("Enter your full story")
        return self.cleaned_data['lng']
...