как получить значение поля в Django - PullRequest
0 голосов
/ 05 марта 2019

В настоящее время я работаю над приложением django, таким как IMDB.com, которое имеет модель Media (содержит телепередачи и фильмы) и модель Episode с отношением один-ко-многим между ними, чтобы отображать эти эпизоды на странице TvShow.

Мне удалось показать эпизоды телешоу на странице с:

def tvshow(request, tvshow_title):

  tvshow = get_object_or_404(Media, title=tvshow_title)

  episodes = Episode.objects.all().filter(is_published=True, tvshow=tvshow)

  context = {
      'tvshow': tvshow,
      'episodes': episodes
  }

  return render(request, 'media/tvshow.html', context)

, и это работало совершенно нормально, но мне также нужно было показывать эпизоды, основанные на сезоне, и это меня немного смутило, как узнать, сколько сезонов есть в телешоу, когда в модели Media нет поля для этого, кроме Эпизода Модель имела поле season_number, поэтому я попытался запросить последний эпизод телешоу на основе season_number:

latest_episode = Episode.objects.order_by('-season_number').filter(is_published=True, tvshow=tvshow)[:1]

и мне действительно удалось получить эпизод, но я не знаю, как узнать, сколько в нем сезона.

Я пытался

seasons = latest_episode.season_number

и

seasons = latest_episode['season_number']

и ни один из них не работал. пожалуйста, скажите мне, если есть лучший способ сделать это, и если этот способ хорош, дайте мне знать, как получить season_number. :)

1 Ответ

0 голосов
/ 05 марта 2019

Использование [:1] возвращает QuerySet, который в основном является списком, а не экземпляром модели (представьте, что он возвращает [EPISODE] вместо просто EPISODE. Это означает, что у вас нет доступа к эпизоду season_number атрибут.

Попробуйте это:

latest_episode = Episode.objects.order_by('-season_number').filter(is_published=True, tvshow=tvshow).first()

и тогда вы сможете использовать latest_episode.season_number

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