2013-07-08 49 views
1

我似乎無法讓我的形式.is_valid()Django的form.is_valid()沒有驗證

相關視圖

def edit_social_media(request, user_id): 

#verify a user is allowed to access the page 

# user is saving the form 
if request.POST: 

form = SocialMediaForm(request.POST) 
if form.is_valid(): 
... 

    return HttpResponseRedirect(reverse(users.profile, 
            args = (request.user.id,))) 

# displaying the initial form 
else: 
    try: 
    form = SocialMediaForm(instance = SocialMedia.objects.get(user = request.user)) 
    except SocialMedia.DoesNotExist: 
    form = SocialMediaForm() 


return render_to_response('users/edit_social_media.html', {'form': form, 'user' : user}, 
context_instance = RequestContext(request)) 

Forms.py

class SocialMediaForm(forms.ModelForm): 
    class Meta: 
     model = SocialMedia 
     fields = {'twitter', 'facebook', 'linkedin'} 
驗證

模板

<form method="post" action=''> 
{% csrf_token %} 
<div class="form-col-left"> 
    <p> 
    {{ form.as_p }} 
</p> 
</div> 


<div class="submitbutton"> 
<input type="submit" class="green button" value="Save Social Media Settings" /> 
</div> 

</form> 

模型

from django.db import models 
from django.contrib.auth.models import User 

class SocialMedia(models.Model): 
    class Meta: 
     app_label = 'dashboard' 

    #the user associated with the data 
    user = models.ForeignKey(User) 

    #Twitter, Facebook, and Linkedin pages 
    twitter = models.URLField("Twitter") 
    facebook = models.URLField("Facebook") 
    linkedin = models.URLField("Linkedin") 

一些幫助將不勝感激。我對django比較陌生,所以我錯過了一些細小的細微差別。我發現了一些與綁定vs未綁定表單有關的stackoverflow類似的問題,但是從閱讀文檔我認爲我正確地將數據綁定到表單。

回答

1

由於這是一個ModelForm,它將有助於查看此表單正在使用的實際模型SocialMedia類。另外我不確定你的意思是沒有得到它的驗證,但我假設is_valid()方法返回False。

我的猜測是該方法返回False,因爲您沒有在窗體上設置用戶。在POST字典中,您沒有用戶或user_id。在 「如果form.is_valid()」 語句之前,添加以下行:

form.instance.user = self.request.user

希望這個作品。

+0

我已編輯添加關聯的model.py。 form.instance.user = self.request.user似乎沒有解決這個問題。 – user2562438

+0

你確定你正在填寫所有領域?如果是的話,你在頁面上發現了什麼錯誤? –

+0

表單字段?我相當肯定我正在填補他們。雖然模型也有用戶領域,但我相信我們已經解決了這個問題。 我沒有收到錯誤。我有一個if語句設置,如果form.is_valid()渲染一個頁面,否則渲染一個不同的頁面。 我可以提供哪些信息以提供更多幫助? – user2562438