2

我有以下型号:

class comment(models.Model):
    userid=models.CharField(max_length=140)
    apparelid=models.IntegerField(blank=True)
    desc=models.TextField(blank=True)
    def __unicode__(self):
        return self.userid

形式 :

class commentForm(ModelForm):
    class Meta:
        model=comment
        exclude=('userid','apparelid',)

并查看如下:

def comment(request,title_id):
    if request.method=='POST':
        form=commentForm(request.POST)
        if form.is_valid():
            new=form.save(commit=False)
            new.userid=request.user.username
            new.apparelid=title_id
            new.save()
            return HttpResponseRedirect('/')
        else:
            form=commentForm()

    template=loader.get_template('apple3/comment.html')
    context=RequestContext(request,{
                                        'form':form,
                                       }   
                              )   
    return HttpResponse(template.render(context))

每当我打开包含上述表单的页面时,它都会显示如下错误:

Exception Type:     AttributeError
Exception Value:     'function' object has no attribute 'objects'
4

3 回答 3

3

您可能从视图内部导入comment模型,然后comment再次用作视图名称。这就是引发错误的原因。

如果您在同一个模块中使用它们,请为您的视图和模型使用不同的名称。

于 2013-11-09T13:51:09.267 回答
2

@mariodev 似乎解决了手头的问题。另外,我建议以下两个步骤来避免将来出现类似问题:

  1. 彻底阅读PEP8,Python 代码的样式指南
  2. 仅使用包和模块 import

遵循这两个链接将使您的代码更加 Python 且不易出错。

于 2013-11-09T14:50:25.223 回答
1

模型和视图函数的名称相同,导致错误:

Exception Value:     'function' object has no attribute 'objects'

您可以为您的类和函数使用不同的命名约定。根据 PEP8,类名的第一个字母应该是大写/大写,函数名应该是小写。

因此,在您的情况下,如果您必须保持名称完全相同,您可以将模型类重命名为Comment 并让视图函数的名称为comment,这应该可以解决问题。

于 2013-11-09T14:34:45.400 回答