Я построил класс 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')
Какое в этом случае правильное / элегантное решение?