我建立了一个类 PlayerListView ,该类使用ListView类进行视图的常规显示。
class PlayerListView(LoginRequiredMixin, ListView):
model = PlayerSeason
template_name = 'squad/players_list.html'
context_object_name = 'players'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['test'] = 'test'
context['season_name'] = PlayerSeason.objects.first().season.season_name
return context
通常,如果没有PlayerSeason模型的记录,则模板显示的html代码将显示零数据。但是由于我的模板还需要其他数据,因此我需要使用get_context_data()将其放在“上下文”中。
context['season_name'] = PlayerSeason.objects.first().season.season_name
当没有PlayerSeason的记录并且我想为season_name设置上下文数据时,会发生问题。它检查关系字段“季节”中的字段。因为它不存在,所以它返回错误: AttributeError:'NoneType'对象没有属性(逻辑)。
我要避免出现任何错误,是重定向到用于插入PlayerSeason记录的URL(让我们说:“ / create / playerseason”。
我尝试过的解决方案之一是在get()方法中进行检查
if PlayerSeason.objects.count():
season_name = PlayerSeason.objects.first().season.season_name
else:
return redirect('blog-home')
在这种情况下,正确/优雅的解决方案是什么?
答案 0 :(得分:0)
在将session_name
添加到上下文检查数据库中是否存在PlayerSession对象之前,您的解决方案是可以的,如果是,则将context["session_name"]
分配给第一个对象的名称。如果数据库中没有对象,只需跳过分配session_name
的步骤即可。在模板中,您还可以检查session_name
是否存在。
{% if session_name %}
...
{% else %}
...
{% endif %}