Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';非类型';对象没有属性';七五';尽管物体存在_Python_Django - Fatal编程技术网

Python ';非类型';对象没有属性';七五';尽管物体存在

Python ';非类型';对象没有属性';七五';尽管物体存在,python,django,Python,Django,我正在创建一个网站,用户可以创建一个项目。每个项目有10个宏观问题。每个宏观问题都有子问题 我正试图找到一个宏观问题的答案 projects\u id包含我数据库中的所有项目 projects = Project.objects.all() projects_id = [] for project in projects: projects_id.append(project.id) 所以我做了一个for循环: for project_id in projects_id

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

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

projects\u 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)
如果我使用控制台,我可以检索
答案\u seventh\u five

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

“NoneType”对象没有属性“seventh_-five”

这一点我无法解释,因为
answer\u seventh\u five
存在(因为我通过控制台检索它来测试它)

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

我试过:

seventh_question_project = Seventhquestion.objects.get(project=project_id)
但我得到:

第七个问题匹配查询不存在


但是:
seventh\u question\u project=Seventhquestion.objects.all()
works

不通过ID。这不是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
        ...
这个怎么样

seventh\u question\u project=Seventhquestion.objects.filter(project=project\u id.first())
答案是第七个问题

您在一堆
项目中循环_id
,只需要其中一个项目不存在,就会发生此错误。当您在控制台中尝试时,您尝试了哪些ID?另外,不要使用
get()
,因为从外观上看,这是一个一对多关系,因此如果存在0或>1个对象,这将引发异常。我确保所有
projects\u id
仅包含现有项目。请看编辑。
项目
第七个问题
之间的关系是一对一的。每个项目只能有一个第七个问题。但这不是关于现有的项目,而是关于现有的具有项目外键的
Seventhquestion
对象。此外,如果字段是
project
,则应按如下方式进行筛选:
filter(project=)
而不是按project\u id进行筛选。如果您只有id,则应
filter(project\u id=project\u id)
。FK字段指的是实际对象,这就是为什么在Django中通常不传递ID,而是传递实际对象,从而使代码更具可读性。请使用调试器。在
回答第七个问题项目的第七个问题项目的第七个问题项目上放置一个断点。在每个循环迭代中检查第七个问题项目。我试着去做。我想,如果我将
Seventhquestion.seventh_-five
设置为数据库中的某个值,比如
default=“No
,这会解决没有对象的风险吗?
for project in Project.objects.all():
    if hasattr(project, "seventhquestion"):
        # still need to check, you never know
        answer_seventh_five = project.seventhquestion.seventh_five
        ...