2017-10-21 5 views
0

양식을 설정하고 오류없이 작업했지만, RadioSelect 위젯으로 IntegerFIeld를 추가 한 후 양식의 유효성을 더 이상 확인하지 않았습니다. (이전에는 모델에 CharField 만 있고 위젯은 없었습니다)라디오 위젯으로 IntegerField를 추가 한 후 Django 폼 유효성 검사가 작동하지 않습니다.

다른 유사한 질문을 검색했지만이 문제를 해결할 수있는 방법을 찾을 수 없었습니다.

현재로서는 views.py에서 코딩 한 오류 메시지가 계속 표시됩니다. 다음과 같이

내 셋업은 다음과 같습니다

views.py

from django.shortcuts import render, get_object_or_404, redirect 
from django.contrib.auth.decorators import login_required 
from django.contrib import messages 
from django.utils import timezone 
from .forms import DiaryEntryForm 
from .models import DiaryEntry 

def new_entry(request): 
    if request.method == "POST": 
     form = DiaryEntryForm(request.POST) 
     if form.is_valid(): 
      entry = form.save(commit=False) 
      entry.author = request.user 
      entry.created_date = timezone.now() 
      entry.save() 
      messages.success(request, "Entry created successfully") 
      return redirect(entry_detail, entry.pk) 
     else: 
      messages.error(request, "There was an error saving your entry")    
      return render(request, 'diaryentryform.html', {'form': form}) 
    else: 
     form = DiaryEntryForm() 
     return render(request, 'diaryentryform.html', {'form': form}) 

forms.py

from django import forms 
from .models import DiaryEntry, FORM_CHOICES 


class DiaryEntryForm(forms.ModelForm): 
    body = forms.ChoiceField(widget=forms.RadioSelect(),choices=FORM_CHOICES) 
    mind = forms.ChoiceField(widget=forms.RadioSelect(),choices=FORM_CHOICES) 

    class Meta: 
     model = DiaryEntry   
     fields = ('body', 'mind', 'insights') 

models.py를

from __future__ import unicode_literals 

from django.db import models 
from django.utils import timezone 
from django.conf import settings 
from django import forms 

# Create your models here. 

FORM_CHOICES = [ 
    ('very bad', 'very bad'), 
    ('bd', 'bad'), 
    ('OK', 'OK'), 
    ('good', 'good'), 
    ('very good', 'very good'), 
] 

class DiaryEntry(models.Model): 
    """ 
    Define the diary entry model here 
    """ 

    author = models.ForeignKey(settings.AUTH_USER_MODEL) # link author to the registered user 
    title = models.CharField(max_length=200) # set this to be the date later on 
    created_date = models.DateTimeField(auto_now_add=True) 
    body = models.IntegerField(blank=True, null=True, choices=FORM_CHOICES) 
    mind = models.IntegerField(blank=True, null=True, choices=FORM_CHOICES) 
    insights = models.TextField() 

    def publish(self): 
     self.save() 

    def __unicode__(self): 
     return self.title 

미리 감사드립니다.

+0

글쎄, 무엇을 기대합니까? 'IntegerField'는 정수를 기대합니다. 선택은 문자열입니다. 모델에'CharField'가 필요합니다. – dirkgroten

+0

물론! 어리석은 실수! 도움을 많이 주셔서 감사합니다. –

+0

디버거 사용법 배우기 : 폼에 게시되는 것을 실제로 볼 수있을 때 이러한 종류의 문제를 해결하는 것이 훨씬 쉽습니다 ... – dirkgroten

답변

1

FORM_CHOICES은 문자열입니다. 따라서 IntegerField이 이러한 선택으로 유효성을 검사 할 것으로 기대할 수는 없습니다.

  • 어느 당신의 FORM_CHOICES int로 값을 변경 (예를 들어, (1) '매우 불량', (2, ...) '나쁜')
  • 또는 변경 모델의 IntegerFieldCharField합니다.