Найти - Пользователи
Полная версия: многоуровневое соединение таблиц ORM
Начало » Django » многоуровневое соединение таблиц ORM
1
san7667
Добрый день!
Я новичок в 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)

ZerG
Полагаю описание ваших моделей и как вы строите запрос мы должны угадать?
san7667
ZerG
Полагаю описание ваших моделей и как вы строите запрос мы должны угадать?

Models.py

 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)

Views.py

 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
Я так понимаю этот раздел мертвый, но может кому пригодиться:
Решение:
Поэтапное соединение таблиц:
 queryset = konkurs_result.objects.select_related('konkurs_k','konkurs_k__konkursants')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB