2017-04-11 124 views
0

我試圖運行和驗證窗體,但有一些問題。它不顯示錶單,而是顯示當表單無效時顯示的HttpResponse。表單驗證錯誤?

這裏是我的模型:

class Preference(models.Model): 
CLASS_CHOICES = [('1', '1'), ('2', '2'), ('3', '3')] 
BOARD_CHOICES = [('C', 'CBSE'), ('I', 'ICSE'), ('S', 'State Board')] 
SLOT_CHOICES = [('M', 'Morning'), ('A', 'AfterNoon'), ('E', 'Evening')] 
SUBJECT_CHOICES = [('H', 'HINDI'), ('M', 'MATH'), ('E', 'ENGLISH')] 
LOCATION_CHOICES = [('M', 'My Home'), ('T', 'I am willing to travel')] 
GENDER_CHOICES = [('M', 'Male'), ('F', 'Female'), ('B', 'Both are Fine')] 
Class = models.CharField(max_length=2, choices=CLASS_CHOICES, default='1', blank=False) 
Board = models.CharField(max_length=2, choices=BOARD_CHOICES, default='C', blank=False) 
Subject = models.CharField(max_length=2, choices=SUBJECT_CHOICES, default='M', blank=False) 
Frequency = models.IntegerField(default=7) 
Slot = models.CharField(max_length=2, choices=SLOT_CHOICES, default='E', blank=False) 
Location = models.CharField(max_length=2, choices=LOCATION_CHOICES, default='M', blank=False) 
Gender = models.CharField(max_length=2, choices=GENDER_CHOICES, default='M', blank=False) 
Address = models.CharField(max_length=250, blank=True) 
Travel = models.IntegerField(default=5) 
Name = models.CharField(max_length=50, blank=True) 
Contact = models.IntegerField(default=100) 

這裏是我的形式:

class PreferenceForm(forms.ModelForm): 
class Meta: 
    model = Preference 
    fields = ['Class', 'Board', 'Subject', 'Frequency', 'Slot', 'Location', 'Gender', 'Address', 
       'Travel', 'Name', 'Contact'] 
    widgets = { 
      'Board': forms.RadioSelect(), 
      'Subject': forms.CheckboxSelectMultiple(), 
      'Slot': forms.CheckboxSelectMultiple(), 
      'Location': forms.CheckboxSelectMultiple(), 
      'Gender': forms.RadioSelect() } 

這是我的觀點:

def pref2(request): 
form = PreferenceForm(request.POST or None) 
if form.is_valid(): 
    prefer = form.save(commit=False) 
    prefer.save() 
    return HttpResponse('Order Complete') 
else: 
    return HttpResponse('Some Problem') 

當我運行的應用程序,它只是顯示沒有顯示錶格的'Some Problem'這一行。所有的幫助/建議表示感謝,謝謝。

+0

你能打印出form.errors,看看有沒有什麼東西存在嗎? – JacobIRR

+0

你不是把你的HttpResponse設置爲'Some Problem'嗎?你不應該發送('一些問題:'+ request.form) – Adrianopolis

+0

@Adrianopolis在這樣做的形式顯示,但它不工作。 –

回答

0

那麼,你只返回一個HttpResponse。如果你想返回表單顯示錯誤,你需要使用render

def pref2(request): 
    form = PreferenceForm(request.POST or None) 

    if form.is_valid(): 
    prefer = form.save(commit=False) 
    prefer.save() 

    # Good practice here would be to flash a message on success 
    # and on failure. 

    return render(request, "template.html", { "form": form }) 
+0

我改變了看法,以 - 如果form.is_valid(): 喜歡= form.save(提交= FALSE) prefer.save() 返回渲染(請求, '網站/ detail.html',{'喜歡':prefer}) else: return render(request,'website/pref2.html',{'form':form}) 它顯示窗體,但它不工作。 –