“NoneType”对象没有属性“seventh\u five”,尽管存在obj

2024-09-29 19:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个网站,用户可以创建一个项目。每个项目有10个宏观问题。每个宏观问题都有子问题

我正试图找到一个宏观问题的答案

projects_id包含数据库中的所有项目

  projects = Project.objects.all()
  projects_id = []
  for project in projects:
    projects_id.append(project.id)

所以我做了一个for循环:

  for project_id in projects_id:
    seventh_question_project = Seventhquestion.objects.all().filter(project=project_id).first()
    answer_seventh_five = seventh_question_project.seventh_five
        if answer_seventh_five == "No":
           unaudited_projects.append(answer_seventh_five)
        else:
           audited_projects.append(answer_seventh_five)

如果使用控制台,我可以检索answer_seventh_five

enter image description here

但是,如果加载页面,我会得到:

'NoneType' object has no attribute 'seventh_five'

我无法解释,因为answer_seventh_five存在(因为我通过控制台检索它来测试它)

可能原因是我正在筛选,而不是使用get获取对象

我试过:

seventh_question_project = Seventhquestion.objects.get(project=project_id)

但我得到:

Seventhquestion matching query does not exist.

但是:seventh_question_project = Seventhquestion.objects.all()起作用


Tags: 项目answerinprojectidforobjectsall
2条回答

不要通过身份证。这不是Django ORM的用途。只需循环浏览项目本身:

for project in Project.objects.all():
    seventh_question_project = Seventhquestion.objects.all().filter(project=project).first()  # <  not project_id!
    # or better:
    # seventh_question_project = project.seventhquestion_set.first()  
    if seventh_question_project:
        # you should always check, because you need to write fool-proof code
        answer_seventh_five = seventh_question_project.seventh_five
        ...

但是对于关系,获取相关对象的方法要简单得多。因此假设project字段是Seventhquestion模型上的OneToOneField,则反向关系是seventhquestion

for project in Project.objects.all():
    if hasattr(project, "seventhquestion"):
        # still need to check, you never know
        answer_seventh_five = project.seventhquestion.seventh_five
        ...

这个怎么样

seventh_question_project = Seventhquestion.objects.filter(project=project_id).first()
answer_seventh_five = seventh_question_project.seventh_five

相关问题 更多 >

    热门问题