Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 Django-属性错误:';非类型';对象没有属性';pk';_Python_Django - Fatal编程技术网

Python Django-属性错误:';非类型';对象没有属性';pk';

Python Django-属性错误:';非类型';对象没有属性';pk';,python,django,Python,Django,简而言之,我正在制作ToDo应用程序,用户可以在其中存储他的ToDo和项目。项目由TODO组成,可以与其他用户共享。我正在显示属于某个用户的所有todo和项目,但当我尝试访问用户todo时,我得到:AttributeError:'NoneType'对象没有属性“pk” 当访问项目内的todo甚至其他项目内的todo时,一切正常。 下面是日志: Traceback (most recent call last): File "C:\Users\dknapik\.virtua

简而言之,我正在制作ToDo应用程序,用户可以在其中存储他的ToDo和项目。项目由TODO组成,可以与其他用户共享。我正在显示属于某个用户的所有todo和项目,但当我尝试访问用户todo时,我得到:
AttributeError:'NoneType'对象没有属性“pk”

当访问项目内的todo甚至其他项目内的todo时,一切正常。 下面是日志:

 Traceback (most recent call last):
      File "C:\Users\dknapik\.virtualenvs\todo-licencjat-_Vlumx_M\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
        response = get_response(request)
      File "C:\Users\dknapik\.virtualenvs\todo-licencjat-_Vlumx_M\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "C:\Users\dknapik\.virtualenvs\todo-licencjat-_Vlumx_M\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
        return view_func(request, *args, **kwargs)
      File "C:\Users\dknapik\Documents\Software\Python\lic\todo-licencjat\task\views.py", line 126, in viewtask
        project = get_object_or_404(Project, pk=task.project_id.pk)

Exception Type: AttributeError at /task/4
Exception Value: 'NoneType' object has no attribute 'pk'
视图:

和型号:

class Project(models.Model):
    title = models.CharField(max_length=100)
    project_owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name="owner")
    created = models.DateTimeField(auto_now_add=True)
    completed = models.DateTimeField(blank=True, null=True)
    participant1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name="participant", blank=True, null=True)

class Task(models.Model):
    title = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    scheduled = models.DateTimeField(blank=True, null=True)
    completed = models.DateTimeField(blank=True, null=True)
    importance = models.BooleanField(default=False)
    task_owner = models.ForeignKey(User, on_delete=models.CASCADE)
    project_id = models.ForeignKey(Project, on_delete=models.CASCADE, blank=True, null=True)
我知道我需要对
project=get\u object\u或\u 404(project,pk=task.project\u id.pk)
进行一些操作,但我无法找出能够显示所有这些内容的条件:

  • 用户自己的TODO
  • 用户在其项目中的TODO
  • 用户是参与者的项目内的TODO

我将非常感谢您的帮助,谢谢。

我能够找到答案,基本上
hasattr()
做到了:

if hasattr(task.project_id, 'pk'):
    project = get_object_or_404(Project, pk=task.project_id.pk)

谢谢

project\u id
None
,所以你的
任务没有
project\u id
(它是
NULL
/
None
)。我在这里只是建议你使用django提供的基于类的视图,而不是基于函数的视图,因为基于类的视图为你做了很多工作
if hasattr(task.project_id, 'pk'):
    project = get_object_or_404(Project, pk=task.project_id.pk)