Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
10 / 8 / 5
Регистрация: 06.12.2018
Сообщений: 79

Выборка данных из связанных таблиц

11.12.2022, 22:08. Показов 2930. Ответов 3

Студворк — интернет-сервис помощи студентам
Имею 3 связанных таблицы. К примеру:
Python
1
2
3
4
5
6
7
8
9
10
11
class MainTable(models.Model):
    name = models.CharField(blank=False, max_length=100)
    isactive = models.BooleanField(default=True)
 
class Table(models.Model):
    name = models.ForeignKey(MainTable, on_delete=models.CASCADE)
    somthing = models.CharField(blank=False, max_length=50)
 
class ImagesTable(models.Model):
    name = models.ForeignKey(Table, on_delete=models.CASCADE)
    image = models.ImageField(blank=True, upload_to=path)
Хочу сделать выборку всего, что касается определенной записи таблицы MainTable (из 2-х других связанных таблиц)

Объект из первой беру так:
Python
1
item = get_object_or_404(MainTable, pk = some_pk)
Из таблицы Table беру все связанные записи так:
Python
1
items_table = item.table_set.all()
Либо так (не совсем понимаю как лучше):
Python
1
items_table = Table.objects.filter(maintable_id = some_pk)
А вот с третьей ВОПРОС. Как сделать выборку оптимально?
Пока делаю так:
Python
1
2
3
4
5
6
items_image_table = []
for el in items_table :
        if str(el.maintable_id) == some_pk:
            middlevar = ImagesTable.objects.filter(name = el.id)
            for i in middlevar :
                items_image_table .append(get_object_or_404(ImagesTable, id = i.id))
Но уверен, что есть способ лучше, который может подсказать кто-то более опытный.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.12.2022, 22:08
Ответы с готовыми решениями:

Вывод данных из связанных таблиц
Всем салют!!! Помогите плиз, есть две связанные модели, как показать содержимое таким образом: Категория 1 - 50 записей Категория 2 -...

Вывод данных из связанных таблиц в шаблон django
Добрый день! Вот есть две связанные таблицы. Нужно вывести данные из обоих. Сначала из первой (Наименование категории), затем относящиеся к...

Выборка данных из связанных таблиц
Всем привет! Столкнулся с проблемой выборки данных из связанных таблиц.Есть БД Access, читаю с помощью OLEDB. Есть 2 таблицы: 1...

3
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
13.12.2022, 12:10
Лучший ответ Сообщение было отмечено GeXaR как решение

Решение

Для начала присвой FK полям related_name
Python
1
2
3
4
5
6
7
8
9
10
11
class MainTable(models.Model):
    name = models.CharField(blank=False, max_length=100)
    isactive = models.BooleanField(default=True)
 
class Table(models.Model):
    name = models.ForeignKey(MainTable, on_delete=models.CASCADE, related_name="name_table")
    somthing = models.CharField(blank=False, max_length=50)
 
class ImagesTable(models.Model):
    name = models.ForeignKey(Table, on_delete=models.CASCADE, related_name="name_images_table")
    image = models.ImageField(blank=True, upload_to=path)
А потом можешь обращаться к ним и из MainTable доставать все что тебе нужно:
Python
1
2
3
item = get_object_or_404(MainTable, pk = some_pk)
items_table = item.name_table__set.all()
image_items = item.name_images_table__set.all()
Как-то так
0
10 / 8 / 5
Регистрация: 06.12.2018
Сообщений: 79
13.12.2022, 13:07  [ТС]
Огромное спасибо) не знал о такой возможности.
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
13.12.2022, 13:11
Но лучше это сделать через annotate. Почитай разберись, это уменьшит количество запросов в базу
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2022, 13:11
Помогаю со студенческими работами здесь

Выборка данных из 4 связанных таблиц
Всем добрый день! Создавал 3 таблицы (категория, производитель, статус продукта) и в 4-ю (продукт) засунул id прошлых как fk. Сейчас нужно...

Выборка связанных данных из двух таблиц
На текущий момент запрос такого вида SELECT id, product1, ( SELECT price2 FROM post_2 WHERE UPPER(post_2.post2) ...

Выборка данных из связанных таблиц по условию
Здравствуйте. Имеется 2 модели: public class Album { public int ID { get; set; } public string CoverPath { get;...

Выборка из связанных таблиц
Как выбрать значения из связанных таблиц я знаю. Но в одном из случаев выбирается не всё. Есть таблица пользователей и таблица кабинетов....

Выборка из двух связанных таблиц
Есть две таблицы связаны между собой как один к многим. Сделал выборку с помощью подзапроса. select c.id_t1, c.sn from table1 c ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru