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) модели можно использовать для создания псевдонимов имен полей для целей кода отображения, но они не будут работать для фильтрации кверисетов.

Вернуться на верх