【问题标题】:'NoneType' object has no attribute 'user'“NoneType”对象没有属性“用户”
【发布时间】:2013-05-13 13:36:28
【问题描述】:

models.py

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'

【问题讨论】:

  • 附带说明,当 .get(user=user.id) 有效时,.get(user=user) 就足够了。
  • 就我而言,它仍然给出同样的错误
  • 是的..我知道..我没有给你一个解决方案。做一件事 - 转到管理界面,为该用户添加一个报告(如果还没有的话),然后再次执行代码。它应该工作。代码对我来说很好
  • 是的,我也试过了,但错误是他们的
  • 好的.. 还有一件事。只需删除 try except ,看看你得到什么错误。我的猜测是,您可能有多个与用户相关的报告。

标签: django django-models django-admin django-views


【解决方案1】:

好像

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

给你一个EmptyQuerySet

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

你可以使用get_or_create

【讨论】:

  • Get 或 create 返回 2 个参数、一个 created 标志和实例,您需要分配后者。 obj = Report.objects.get_or_create(**kwargs)[0]
【解决方案2】:

您的代码中的报告似乎是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 并进行适当的检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2014-07-05
    • 2018-05-05
    • 2013-02-11
    相关资源
    最近更新 更多