2017-04-23 74 views
0

NOTE/UPDATE:此問題是由拼寫錯誤:(驗證上的ModelForm失敗


嗨,我是想教我的自我Django的同時使一個小任務管理應用程序引起的

我有一個模型

class Task(models.Model): 
    track = models.ForeignKey(Track, on_delete=models.SET_NULL, null=True) 
    title = models.CharField(max_length=100) 
    description = models.CharField(max_length=265, blank=True) 
    done = models.BooleanField(default=False) 

    def __str__(self): 
     return self.title 

和相關的ModelForm

class TaskForm(forms.ModelForm): 
    class Meta: 
     model = Task 
     fields = ['track', 'title', 'description', 'done'] 

表單發佈時taskForm.is_valid()返回False。 這是post_task方法:

def post_task(request): 
    form = TaskForm(request.POST) 
    if form.is_valid(): 
     form.save(commit=True) 
    else: 
     print(form.errors) 
    return HttpResponseRedirect('/') 

和頁面的表單標籤:

 <form action="post_url" mehod="post"> 
     {% csrf_token %} 
     {{ task_form.as_p }} 
     <input type="submit" value="Add"/> 
    </form> 

儘管我已經填寫了所有我得到驗證錯誤的數據,這是控制檯打印:

0:

<ul class="errorlist"><li>track<ul class="errorlist"><li>This field is required.</li></ul></li><li>title<ul class="errorlist"><li>This field is required.</li></ul></li></ul> 

所有值都在請求被通過

[23/Apr/2017 12:34:38] "GET /post_url/?csrfmiddlewaretoken=VqUx3EM9yGFzS88kYRtTWtniaCV8ZukxymylPILlxHBohtfEyhD3epOKOjKNIVCU&track=1&title=testTitle&description=testDescription HTTP/1.1" 302 0 

謝謝!

+2

你確定你做你的要求爲POST? ,它似乎是一個GET。 –

+0

注意:您不需要將'commit = True'傳遞給'form.save()',這是默認值。 – Daniel

+0

另一方面請注意:嘗試在'action'屬性中使用'{%url%}'模板標籤,或將其留空以將數據發送到同一頁面。 – Daniel

回答

2

出現拼寫錯誤有mehod

<form action="post_url" mehod="post"> 

改變這

<form action="post_url" method="post"> 
+0

該死的,你是對的我無法想象我是如何錯過了這一點。從控制檯應該很明顯,我發送GET而不是POST – Mil4n