如果模型没有记录,则Django ListVIew重定向

时间:2019-06-19 16:05:41

标签: django django-models

我建立了一个类 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')

在这种情况下,正确/优雅的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

在将session_name添加到上下文检查数据库中是否存在PlayerSession对象之前,您的解决方案是可以的,如果是,则将context["session_name"]分配给第一个对象的名称。如果数据库中没有对象,只需跳过分配session_name的步骤即可。在模板中,您还可以检查session_name是否存在。

{% if session_name %}
...
{% else %}
...
{% endif %}