Переадресация Django ListVIew, если модель не имеет записей - PullRequest
0 голосов
/ 19 июня 2019

Я построил класс 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' не имеет атрибута (логический).

Чего я хочу избежать - это перенаправить на URL для вставки записей PlayerSeason (скажем, «/ create / playerseason».

Одним из решений, которое я пробовал, была проверка того, чтов методе get ()

    if PlayerSeason.objects.count():
        season_name = PlayerSeason.objects.first().season.season_name
    else:
        return redirect('blog-home')

Какое в этом случае правильное / элегантное решение?

1 Ответ

0 голосов
/ 19 июня 2019

Ваше решение в порядке, прежде чем вы добавите session_name в контекстную проверку, если в базе данных есть какой-либо объект PlayerSession, если так, присвойте context["session_name"] имени вашего первого объекта. Если в базе данных нет объектов, просто пропустите присвоение session_name. В вашем шаблоне вы также можете сделать проверку, если существует session_name.

{% if session_name %}
...
{% else %}
...
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...