Django: Отображение данных из другой таблицы
У меня возникают трудности с отображением некоторых данных из двух или трех таблиц. Вот мой код для отображения всех данных только из таблицы Device.
def device(request):
if request.method == 'GET':
queryset = Device.objects.all()
if queryset:
data = {"queryset": queryset}
return render(request, 'device/device.html', data)
else:
return render(request, 'device/device.html')
Я хочу добавить некоторые данные из другой таблицы, как мне вставить их сюда?
Просто сделайте запросы и поместите результаты в контекст рендеринга, и ссылайтесь на них в своем шаблоне.
return render(request, 'device/device.html', {
"devices": Device.objects.all(),
"thingabobs": Thingabob.objects.all(),
"chili_pickles": Pickle.objects.filter(flavor="chili"),
"plain_pickles": Pickle.objects.filter(flavor="plain"),
})
Если объекты в различных таблицах имеют наборы общих полей, и именно они будут отображаться в представлении списка, то можно передать смешанный список объектов из различных таблиц для отображения. Кроме того, в языке шаблонов ссылка на несуществующее поле объекта не является ошибкой. {{obj.nosuchfield}}
успешно отображается как нулевая строка.
Так что вы можете пройти
context['vehicle_list'] = list(
Cars.objects.filter(colour='green', available__range = [date1, date2]
)) + list(
Vans.objects.filter(colour='green', available__range = [date1, date2]
))
В связи с этим, конечно, возникает вопрос, должны ли cars
и Vans
быть отдельными таблицами, или Vehicle
с полем vehicle_type
. Но иногда ответ просто в том, что это плохой выбор в ретроспективе, но его слишком трудно изменить сейчас.
Кстати, свойства (@property
) модели можно использовать для создания псевдонимов имен полей для целей кода отображения, но они не будут работать для фильтрации кверисетов.