0

我的博客 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代码中,我将得到一个页面,它只要求标题和文本......

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/ 处的类型错误

“BlogForm”对象不可调用

请求方法:POST Django 版本:1.4.1 异常类型:TypeError 异常值:'BlogForm' 对象不可调用

在“save_bf = SaveForm(postDict)”行中出现错误

4

2 回答 2

0

您首先创建一个名为的 BlogForm 实例SaveForm(顺便说一句,这是 pep08 违规),然后您尝试调用此表单。BlogForm 类是可调用的(与 Python 中的任何其他类一样),但是(除非您__call__(self, ...)在 BlogForm 上定义一个方法,这有点令人惊讶)BlogForm 实例本身不可调用。

附带说明:您的代码非常混乱,并且使事情变得比必须的更复杂。另外,我看不到 Blog 和 Person 之间的关系,并且您在instance实例化 BlogForm 时没有传递正确的值(当它应该是 Blog 时传递一个 Person - 如果您只想创建一个博客,则传递 None )

于 2013-04-03T10:39:20.827 回答
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 实例。根本不需要将它传递给表单,因为它是一个博客表单,而不是个人表单。

于 2013-04-03T10:40:03.437 回答