2013-05-29 166 views
1

请参阅下面的代码。我试图使用ModelForms将记录添加到数据库,但它不断返回服务器错误 - 似乎与.save()操作相反,但我不太确定。任何帮助我如何解决这个问题将非常感激。ModelForm返回服务器错误(500)

#view.py 
from django.http import HttpResponse, HttpResponseRedirect 
from django.shortcuts import render, render_to_response, get_object_or_404 
from django.template import RequestContext 
from forms import ContactForm, wallForm 
from django.core.mail import send_mail 
from home.models import wall 
from django.forms import ModelForm 
def wallpost(request): 
    if request.method == 'POST': 
     new_post = wallForm(request.POST) 
     if form.is_valid(): 
      f = form.cleaned_data['postContent'] 
      new_post.save() 
     return HttpResponseRedirect('/home/') 
    else: 
     form = wallForm() 
    return render(request, 'home/wall_post.html', {'form': form,}) 

#model.py 
from django.db import models 

class wall(models.Model): 
    clusterId = models.ForeignKey(cluster) 
    userId = models.ForeignKey(user) 
    postContent = models.CharField(max_length=800) 
    likes = models.IntegerField(default=0) 
    post_timestamp = models.DateTimeField('date published') 

    clusterId.blank = True 
    userId.blank = True 
    postContent.blank = True 
    likes.blank = True 
    post_timestamp.blank = True 

#forms.py 
from django import forms 
from django.forms import ModelForm 
from home.models import wall 

class wallForm(ModelForm): 
    class Meta: 
     model = wall 

#template.py 
<h1>Posting test</h1> 

{% if form.errors %} 
    <p style="color: red;"> 
     Please correct the error{{ form.errors|pluralize }} below. 
    </p> 
{% endif %} 

<form action="" method="post"> 
    <table> 
     {{ form.as_p }} 
    </table> 
    {% csrf_token %} 
    <input type="submit" value="Submit"> 
</form> 

<b><a href = "/home/">Go back...</a></b> 

回答

4

你的问题是在这里:

def wallpost(request): 
    if request.method == 'POST': 
     new_post = wallForm(request.POST) 
     if form.is_valid(): 
      f = form.cleaned_data['postContent'] 
      new_post.save() 
     return HttpResponseRedirect('/home/') 
    else: 
     form = wallForm() 
    return render(request, 'home/wall_post.html', {'form': form,}) 

在这一行if form.is_valid()form实际上并没有定义。你可能想要if new_post.is_valid(),同样form.cleaned_data应该是new_post.cleaned_data

此外,它不清楚你在做什么这行f = form.cleaned_data['postContent'],因为你不使用f任何地方。

+0

谢谢,'new_post'最近才作为我正在尝试的一些调试的一部分被引入。我马上试试你的代码并重新发布。非常感谢! – user1953875

+0

如果你在'settings.py'中设置了'DEBUG = True',你应该得到一个有用的栈跟踪。 –

0

感谢您的输入。设置debug = True后,我意识到错误来自两个不同的点。

  1. 我模型中的两个外键字段不能为空(尽管将模型属性设置为空= True)。一旦解决了这个问题,那么数据库中就会出现错误;
  2. 我不确定是什么导致了数据库错误,但是当我删除数据库时,创建了一个新的数据库,并重新运行syncdb,一切似乎都正常工作。必须与不排队的领域有关。

再次感谢您的帮助。

相关问题