Форум сайта python.su
Добрый день!
Я новичок в Django и столкнулся с проблемой..
Остряков и метателей на сайт с документацией (я там смотрел уже) убедительная просьба сдержаться и просто не отвечать на мой глупый вопрос!
Вопрос:
Как соединить несколько таблиц в формате:
А к B + B к С связанные между собой поэтапно, в одном queryset?
Детально представлено на скриншоте..
Знаю про select_related, но там соединение “родительская-дочерняя”, мне нужно поэтапно соединить 3 таблицы..
Хочу что то типа такого:
SELECT ..., konkursants.fio FROM konkurs_result LEFT JOIN konkurs_k ON (konkurs_k.id=konkurs_result.konkurs_k_id) LEFT JOIN konkursants ON (konkursants.id=konkurs_k.konkursants_id)
Отредактировано san7667 (Сен. 28, 2023 14:16:54)
Прикреплённый файлы:
2023-09-28_16-52.png (78,4 KБ)
Офлайн
Полагаю описание ваших моделей и как вы строите запрос мы должны угадать?
Офлайн
ZerG
Полагаю описание ваших моделей и как вы строите запрос мы должны угадать?
class Konkurs_result(models.Model): konkurs = models.ForeignKey('Konkurs', on_delete=models.CASCADE, blank=True, null=True) konkurs_j = models.ForeignKey('Konkurs_j', on_delete=models.SET_NULL, null=True, blank=True ) konkurs_k = models.ForeignKey('Konkurs_k', on_delete=models.SET_NULL, null=True, blank=True) konkurs_tour = models.ForeignKey('Konkurs_tour', on_delete=models.SET_NULL, null=True, blank=True) ocenka = models.CharField('Оценка', max_length=100) dop_info = models.TextField('Дополнительная информация', null=True, blank=True)
class Konkurs_k(models.Model): konkurs= models.ForeignKey('Konkurs', on_delete=models.CASCADE, blank=True, null=True) konkursants = models.ForeignKey('Konkursants', on_delete=models.CASCADE)
class Konkursants(models.Model): fio = models.CharField('ФИО', max_length=70) doljn = models.CharField('Должность', max_length=100,null=True, blank=True) otdel = models.TextField('Отдел', null=True, blank=True) dop_info = models.TextField('Дополнительная информация', null=True, blank=True) image=models.ImageField(verbose_name='Фото', upload_to='gallery/',blank=True, null=True) date_reg = models.DateTimeField(auto_now_add=True)
class konkurs_resultSelect(LoginRequiredMixin,generic.ListView): model = Konkurs_result template_name = 'main/form_konkurs_result.html' context_object_name = 'konks_result' paginate_by = 4 def get_queryset(self): return Konkurs_result.objects.filter(konkurs_tour=self.kwargs['pk'],konkurs=self.kwargs['pk2']).select_related('konkurs','konkurs_k','konkurs_j','konkurs_tour')
Отредактировано san7667 (Сен. 28, 2023 15:07:47)
Офлайн
Я так понимаю этот раздел мертвый, но может кому пригодиться:
Решение:
Поэтапное соединение таблиц:
queryset = konkurs_result.objects.select_related('konkurs_k','konkurs_k__konkursants')
Отредактировано san7667 (Сен. 29, 2023 06:39:11)
Офлайн