在通用详细信息视图中使用if语句

时间:2017-12-03 15:50:30

标签: django django-views

我无法弄清楚如何管理我的错误:

我的应用就是这样构建的:

  1. 用户创建项目
  2. 用户被重定向到项目 详情页面
  3. 要求用户创建一个团队并向该项目添加成员
  4. 用户再次被重定向到项目详细信息页面,现在呈现团队名称和所有团队成员的列表。
  5. 我的问题是我想在我的HTML中添加一个context_data来呈现

    def get_context_data(self, **kwargs):
        context = super(ProjectDetailView, self).get_context_data(**kwargs)
        team_name = Project.objects.get(id=self.kwargs['pk']).team_id.members.all()
        context['team_name'] = team_name
        return context 
    

    但是现在当我创建一个项目,因为还没有团队和成员,我收到一个错误' NoneType'对象没有属性'成员'

    我该怎么办?有没有办法在视图中添加if语句?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用if语句。只需检查该对象是否有team_id:

obj = Project.objects.get(id=self.kwargs['pk'])
if obj.team_id:
    team_name = obj.team_id.members.all()
    context['team_name'] = team_name
return context 

但您也可以使用AttributeError语法捕获try except,如下所示:

try:
   team_name = Project.objects.get(id=self.kwargs['pk']).team_id.members.all()
   context['team_name'] = team_name
except AttributeError:
    pass
return context