Найти - Пользователи
Полная версия: Правильный метод, как получить значение поля используя ModelName_set?
Начало » Django » Правильный метод, как получить значение поля используя ModelName_set?
1
TitanFighter
Добрый день.
Короткий простой вопрос.

Создаем инстанс
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]
Правильно ли это?
FishHook

movie.premieres_set.all()
movie.premieres_set.filter()
TitanFighter
FishHook
Это вы указали, чем можно пользоваться? а то я не понял ответ. Ну all() отдаст мне все… Filter() ожидает kwargs, а я не знаю значения, записанное в БД. Мне как раз нужно это значение получить.
FishHook
Какое значение? Сеты отдают вам множество значений.
получить значение поля другой модели, которая имеет ForeignKey с Shows?
таких записей может быть сколько угодно. Чтобы получить одну единственную и уникальную вам надо понимать, чем она уникальна и эту уникальность передать в кверисет. Или выбрать первое из all().
Или поступить как то ещё. Но их много выбирается, вы понимаете это? Может вам нужна связь OneToOne?
TitanFighter
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]
и чтоб улучшить свои знания и сделать по феншую, решил задать вопрос академического характера.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB