Python Django-属性错误:';非类型';对象没有属性';pk';
简而言之,我正在制作ToDo应用程序,用户可以在其中存储他的ToDo和项目。项目由TODO组成,可以与其他用户共享。我正在显示属于某个用户的所有todo和项目,但当我尝试访问用户todo时,我得到: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
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)