我的Blog models.py是
class Blog(models.Model):
title = models.CharField('Title', max_length=200)
text = models.TextField('Text', max_length=2048)
date = models.DateTimeField('Last Modified')
def __unicode__(self):
return '%s' % (self.title)
并在我的views.py中我试图将模型字段转换为表单字段然后附加数据,在以下views.py代码中我将获得一个页面,它只询问标题和文本... < / p>
class BlogForm(ModelForm):
class Meta:
model = Blog
fields=('title', 'text')
def add_blog(request, pID='0'):
bf = BlogForm()
message = 'Unknown Request'
p = get_object_or_404(Person, pk=pID)
if request.method == 'GET':
message = 'Add Blog for %s ' % p.name
if request.method == 'POST':
if request.POST['submit'] == 'Add':
SaveForm = BlogForm(instance=p)
bf = BlogForm(request.POST.copy())
postDict = request.POST.copy()
postDict['date'] = datetime.datetime.now()
save_bf = SaveForm(postDict)
if save_bf.is_valid():
try:
bObj = save_bf.save()
p.blogs.add(bObj)
p.save()
message = 'Blog added to %s.' % p.name
except:
message = 'Database Error.'
else:
message = 'Invalid data in Form.'
return render_to_response(
'people/add_blog_form.html',{'bForm': bf,'message':message})
“但在分配数据后,我会收到以下错误”
/ Blog / AddBlogForm / 1 /
中的TypeError'BlogForm'对象不可调用
请求方法:POST Django版本:1.4.1 异常类型:TypeError 例外值:'BlogForm'对象不可调用
获取错误 “save_bf = SaveForm(postDict)”
答案 0 :(得分:0)
您首先创建一个名为SaveForm
的BlogForm实例(这是一个pep08违规BTW),然后您尝试调用此表单。 BlogForm类是可调用的(与Python中的任何其他类一样),但是(除非您在BlogForm上定义__call__(self, ...)
方法,这有点令人惊讶)BlogForm实例本身不可调用。
作为旁注:您的代码非常混乱,使事情变得更加复杂。此外,我没有看到Blog和Person之间的关系,并且当你安装BlogForm时你没有为instance
传递正确的值(当你应该是博客时你传递一个人 - 如果你只是想要创建一个博客)
答案 1 :(得分:0)
我真的不确定你在POST块内做了什么。您将表单实例化为SaveForm
,然后再次将其实例化为bf
,然后尝试调用传递post字典的第一个实例。我无法分辨应该达到的目标。
应该是:
if request.POST['submit'] == 'Add':
postDict = request.POST.copy()
postDict['date'] = datetime.datetime.now()
bf = SaveForm(postDict)
if bf.is_valid():
编辑实际上,我刚刚意识到p
是一个Person实例。没有必要将它传递给表单,因为它是一个博客表单,而不是一个人形式。