Формы в DJango не работают. Сказать, что атрибут объектов не может быть нулевым, даже если это не так - PullRequest
0 голосов
/ 10 января 2012

Моя форма такая

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")


    def clean_story(self):
        if len(self.cleaned_data['story']) < 4:
            raise forms.ValidationError("Enter your full story")

    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 = -48.543543543
            lng1 = 34.543543543
            # title1 = form.cleaned_data['title']
            titlepost = form.cleaned_data['title']
            ctxt = {'titlehere':titlepost}
            catid = "test1234"
            cat = Category(category=catid)
            cat.full_clean()
            cat.save()
            marker = Marker(lat=lat1, lng=lng1,category=cat, title=titlepost)
            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))

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

С этим кодом я получаю тот, который говорит

Значение исключения: location_marker.title не может быть NULL

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

1 Ответ

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

Ваши clean_title и clean_story должны вернуть чистое значение независимо от того, изменили вы его или нет.

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(self):
        cleaned_data = self.cleaned_data
        return cleaned_data

Вот соответствующие документы Django: https://docs.djangoproject.com/en/1.3/ref/forms/validation/#cleaning-a-specific-field-attribute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...