2013-05-18 108 views
0

models.py“NoneType”对象有没有属性“用户”

class Report(models.Model): 
    user = models.ForeignKey(User, null=False) 
    photo_files_attached = models.BooleanField('Photos', default=False) 

views.py

def media(request): 
    user = request.user 
    try: 

     report = Report.objects.get(user=user.id) 
    except: 
     report = None 

    report_dir = str(report.user.id) + '/' + str(report.id) 
    output_dir = settings.MEDIA_ROOT + '/' + report_dir 
    imagelist = [] 
    if os.path.exists(output_dir): 
     os.chdir(output_dir) 
     for files in os.listdir("."): 
      for extension in JPEG_ALLOWED: 
       if files.endswith(extension): 
        image_with_path = report_dir + '/' + files 
        imagelist.append(image_with_path) 
    return render(request, 'incident/media.html', 
        { 
        'newreport_menu': True, 
        'report':report, 

       }) 

我想上传图片文件并将其保存到数据库中,得到了如下错误 “'NoneType' object has no attribute 'user'

+1

在.get(user = user.id)工作时,'.get(user = user)'就足够了。 – karthikr

+0

对于我的情况,它仍然给出相同的错误 – user2086641

+0

是的..我知道..我没有给你一个解决方案。做一件事 - 进入管理界面,为这个用户添加一个报告(如果尚不存在),并再次执行代码。它应该工作。代码对我来说看起来很好 – karthikr

回答

3

看来

Report.objects.get(user=user.id) 

给你一个EmptyQuerySet

有问题的用户可能还没有任何关联的Report实例。

你可以使用get_or_create

+0

我通过get_or_create得到了更改,我得到的同样错误 – user2086641

+0

获取或创建返回2个参数,创建的标志和实例,您需要指定后者。 'obj = Report.objects.get_or_create(** kwargs)[0]' –

1

看起来报告None在你的代码:

try: 
    report = Report.objects.get(user=user.id) 
except: 
    report = None # <---- your are most probably here 

所以后来report.user将提高'NoneType' object has no attribute 'user'。确保报告不是None并进行适当的检查。

相关问题