2012-08-28 62 views
0

我已經閱讀了關於表單數據沒有保存的其他帖子,但似乎無法查明我自己的問題。有一種感覺,它是我真正想念的東西。非常感謝幫助,謝謝。ModelForm數據沒有保存django

#model 

class AboutMe(models.Model): 
    title = models.CharField(max_length=30) 
    user = models.ForeignKey(User) 
    post = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return self.title 

#form 

class AboutMeForm(forms.ModelForm): 

    class Meta: 
     model = AboutMe 
     fields = ['title', 'post'] 

#view 


def post_line(request): 
    if request.method == 'POST': 
     form = AboutMeForm(request.POST) 
     if form.is_valid(): 
      new_about = form.save(commit=False) 
      new_about.user = request.user  
      new_about.save() 
      return HttpResponseRedirect('index.html') 
    else: 
     form = AboutMeForm() 
    return render_to_response('post_line.html', locals(), context_instance=RequestContext(request)) 

#template: 

<div class="post_line"> 
<form enctype="multipart/form-data" action='.' method="post">{% csrf_token %} 
    {{ form.as_table }} 
    <input type="submit" name="submit" value="post" /> 
</form> 
</div> 
+1

在你看來會發生什麼,如果POST數據無效?看起來沒有返回錯誤的表單。您應該嘗試調試您的視圖。 – Jingo

+0

謝謝京諾!如果POST表單無效,它在視圖中添加了一個else後就可以工作了。我不明白爲什麼會允許表單保存?我的意思是,如果數據最初是有效的,即使沒有else語句,它也應該保存嗎? – Jonathan

+0

我不確定我是否以正確的方式瞭解您,但您不應保存無效數據。清潔數據附加到表單中,您可以檢查,如果您再次閱讀在線文檔中有關表單的章節,可能會對您有所幫助...... :) – Jingo

回答

0

我不能在這裏評論,所以我這裏寫

1)HttpResponseRedirect('index.html')這是這裏錯了,你必須通過一些URL像

/登錄/或/型材/

2)請打印格式如

打印表格及支票什麼你得到的所有的字段都有效或遺漏

,然後告訴形狀誤差

0

試着這樣做:

forms.py

class AboutMeForm(ModelForm): 
    class Meta: 
     model=AboutMe 
     fields = YOUR FIELDS 

    def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user', None) 
     super(AboutMeForm, self).__init__(*args, **kwargs) 

    def save(self, commit=True): 
     instance = super(AboutMeForm, self).save(commit=False) 
     if self.user: 
      instance.user = self.user 
     return instance.save() 

上views.py:

def post_line(request): 
    if request.method == 'POST': 
     form = AboutMeForm(request.POST) 
     if form.is_valid(): 
      new_about = form.save() 
      return HttpResponseRedirect('index.html') 
    else: 
     form = AboutMeForm() 
    return render_to_response('post_line.html', locals(), context_instance=RequestContext(request))