Как достать данные из queryset django?
помогите пожалуйста разобраться. У меня есть такая модель:
class Rout_car(models.Model): #Класс маршрутных листов
YES = 'Да'
NO = 'Нет'
YENO_CHOICES = [
(YES, 'ДА'),
(NO, 'НЕТ'),
]
car_where_in = models.ForeignKey(Contragent,on_delete=models.CASCADE,verbose_name='Откуда',null=True)
car_where_out = models.ForeignKey(Contragent,on_delete=models.CASCADE,verbose_name='Куда', null=True, related_name='car_where_out_related')
rout_driver = models.ManyToManyField(RusRegions, verbose_name='Маршрут по регионам')
car_driver = models.ForeignKey(Driver, on_delete=models.CASCADE, null=True, verbose_name='Водитель')
car_track = models.ForeignKey(Track, on_delete=models.CASCADE, null=True, verbose_name='Тягач')
car_trailer = models.ForeignKey(Trailer, on_delete=models.CASCADE, null=True, verbose_name='Прицеп')
promezhutok_punkt = models.CharField(max_length=3, choices=YENO_CHOICES, verbose_name='Адреса промежуточных пунктов', null=True)
car_parking = models.CharField(max_length=100,choices=YENO_CHOICES ,verbose_name='Места стоянок', null=True)
car_gas_station = models.CharField(max_length=3, choices=YENO_CHOICES,verbose_name='Места заправок топливом', null=True)
contr_agent = models.ForeignKey(Contragent,on_delete=models.CASCADE,verbose_name='Контрагент', null=True, related_name='contr_agent_related') # Позже добавлю справочник обработки
car_date = models.DateField(auto_now=False, null=True, verbose_name='Дата отправления')
class Meta:
verbose_name = 'Маршрут'
verbose_name_plural = 'Сформировать маршрут'
def __str__(self):
return f'{self.car_driver.first_name + " " + self.car_driver.last_name}'#
В данной модели хранятся данные машин которые находятся в рейсе. Мне надо вывести эти данные в шаблон. Создал функцию в views.py:
def all_rout(request):
all = Rout_car.objects.all()
return render(request,'doc_track_app/save_data_doc.html',{'all':all})
при попытке вывести в шаблоне к примеру водителя: {{ all.car_driver.first_name }} ничего не выводится, запускаю power shell в терминале, и он мне пишет: 'QuerySet' object has no attribute 'car_driver' Объясните пожалуйста, как правильно доставать данные? В том же powershell если я делаю так:
f = Rout_car.objects.all()
и печатаю значение f, я получаю:
<QuerySet [<Rout_car: Иванов Иван>, <Rout_car: Петров Петр>]>
Но вот дальше этих данных, ничего не могу получить =(
Ответы (1 шт):
Автор решения: Mikhail Sibirev
→ Ссылка
- Queryset в Django - это iterable-объект, т.е., по сути, представляет собой спископодобный контейнер экземпляров модели. Следовательно, в шаблоне вам нужно использовать тег
forдля перебора и вывода элементов queryset-а:
f = Rout_car.objects.all()
...
{% for rout_car in f %}
{{ rout_car.car_driver.first_name }}
{% endfor %}
- Предыдущий пример можно оптимизировать. Поле
car_driverу вас - этоForeignKeyк другой моделиDriver, и по умолчанию запрос к queryset-у моделиRout_car"доставать" значения полей из связанных моделей не будет, следовательно, при каждом обращении к.first_nameпроисходит новое обращение к БД. Можно явным образом указать, какие объекты вам нужны вместе с основным запросом, используя метод queryset-а select_related():
f = Rout_car.objects.select_related("car_driver").all()