Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Правильный метод, как получить значение поля используя ModelName_set? [RSS Feed]

#1 Окт. 15, 2015 14:47:17

TitanFighter
Зарегистрирован: 2015-06-23
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильный метод, как получить значение поля используя ModelName_set?

Добрый день.
Короткий простой вопрос.

Создаем инстанс

movie = Shows.objects.get(name='50 оттенков серого')
Внутри одной модели я могу получить значения поля простой командой
movie.length # (инстанс.поле)

Есть какой-то такой же простой способ, чтоб получить значение поля другой модели, которая имеет ForeignKey с Shows?

Пробовал так
movie.premieres_set.premier_date
но получаю матюки
AttributeError: 'RelatedManager' object has no attribute 'premier_date'

Сейчас я делаю так
movie.premieres_set.values_list('premier_date', flat=True)[0]
Правильно ли это?

Отредактировано TitanFighter (Окт. 15, 2015 14:48:17)

Офлайн

#2 Окт. 15, 2015 17:25:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Правильный метод, как получить значение поля используя ModelName_set?


movie.premieres_set.all()
movie.premieres_set.filter()



Офлайн

#3 Окт. 15, 2015 17:50:41

TitanFighter
Зарегистрирован: 2015-06-23
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильный метод, как получить значение поля используя ModelName_set?

FishHook
Это вы указали, чем можно пользоваться? а то я не понял ответ. Ну all() отдаст мне все… Filter() ожидает kwargs, а я не знаю значения, записанное в БД. Мне как раз нужно это значение получить.

Отредактировано TitanFighter (Окт. 15, 2015 17:50:53)

Офлайн

#4 Окт. 15, 2015 17:58:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Правильный метод, как получить значение поля используя ModelName_set?

Какое значение? Сеты отдают вам множество значений.

получить значение поля другой модели, которая имеет ForeignKey с Shows?
таких записей может быть сколько угодно. Чтобы получить одну единственную и уникальную вам надо понимать, чем она уникальна и эту уникальность передать в кверисет. Или выбрать первое из all().
Или поступить как то ещё. Но их много выбирается, вы понимаете это? Может вам нужна связь OneToOne?



Отредактировано FishHook (Окт. 15, 2015 17:59:33)

Офлайн

#5 Окт. 15, 2015 23:46:46

TitanFighter
Зарегистрирован: 2015-06-23
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильный метод, как получить значение поля используя ModelName_set?

FishHook
Но их много выбирается, вы понимаете это? Может вам нужна связь OneToOne?
Я полностью понимаю, что вы имеете ввиду и тут я понял, что я где-то туплю

Вот мои модели.
class Shows(models.Model):
    show_name = models.CharField(max_length=100, db_index=True)
    show_length = models.TimeField('Time', null=True)
    show_description = models.TextField('Description', blank=True)
и
class ShowMoviePremiers(models.Model):
    premier_date = models.DateField('Premier Date', null=True)
    premier_movie = models.ForeignKey(Shows, on_delete=models.CASCADE, verbose_name="Premier date of Show")
    premier_country = models.ForeignKey('app_places.PlaceCountries', on_delete=models.CASCADE,
                                                             verbose_name="Country of premier", 
                                                             null=True)  # null = World Premiere
Модель Премьер сделана на базе вашего ответа (я разделил премьеры и кассовые сборы).

Я сейчас делаю в своем коде следующее:
1. Парсю разные сайты, данные на которых могут отличаться.
2. Проверяю, есть ли в БД дата премьер (мировая, России, Украины и тд).
3. Если есть, вытягиваю дату из БД и сравниваю с датой, что есть в парсере. Для каждой страны своя дата премьеры. Если парсере дата раньше - перезаписываем БД.
Соответственно для одного фильма для каждой страны только 1 дата, которую я и хочу получить. Каков вид связи для данных моделей в данном случае нужен? (Я в связях еще чуть плаваю).

Как мне кажется мой код не самый подходящий, хоть и решает мою проблему (извлечения даты из БД)
movie.premieres_set.values_list('premier_date', flat=True)[0]
и чтоб улучшить свои знания и сделать по феншую, решил задать вопрос академического характера.

Отредактировано TitanFighter (Окт. 15, 2015 23:49:50)

Офлайн

  • Начало
  • » Django
  • » Правильный метод, как получить значение поля используя ModelName_set?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version