Форум сайта python.su
0
Добрый день!
Я новичок в 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Б)
Офлайн
61
Полагаю описание ваших моделей и как вы строите запрос мы должны угадать?
Офлайн
0
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)
Офлайн
0
Я так понимаю этот раздел мертвый, но может кому пригодиться:
Решение:
Поэтапное соединение таблиц:
queryset = konkurs_result.objects.select_related('konkurs_k','konkurs_k__konkursants')
Отредактировано san7667 (Сен. 29, 2023 06:39:11)
Офлайн