LINUX.ORG.RU

Джанго, Нуб и queryset!

 


0

1

Здравствуй, многоуважаемый ЛОР!

Сразу оговорюсь, что я новичок в пайтон и джанго. Посему, уперся рогом в одну нетривиальную для меня задачу - доступ к полям связанных моделей.

Предположим есть следующая модель:

class A(models.Model):
    filed_one = models.CharField()

class B(models.Model):
    filed_two = models.CharField()

class С(models.Model):
    filed_three = models.CharField()
    a = models.ForeignKey(A)

class D(models.Model):
    field_four = models.CharField()
    b = models.ForeignKey(B)

Такой вопрос как последовательно отфильтровать(именно отфильровать[предполагается получить список]) данные по полям field_four, filed_three, filed_two и filed_one, имея на руках только dict, образовавшийся после

    c_list = D.objects.filter(field_four="tra-la-la")

?

В оф.доке есть примеры только для двух связанных таблиц. А как быть со случаемя n-го количества последовательно связанных таблиц, связями типа ForeignKey?



Последнее исправление: djnoob (всего исправлений: 3)

Всё наверняка упирается в непродуманную архитектуру и делается в 10 раз проще.

Попробуйте raw запрос написать.

lampslave ★★
()

Ничерта не понимаю, что ты хочешь, когда D не имеет общих (в реляционном смысле) полей с C и A.

Если нужен банальный JOIN — можешь применять .filter(b__filed_two=«whatever») к своему c_list, если так хочется. К результату — следующий фильтр. Для любого числа связанных таблиц. Не вздумай делать так без кэша (или с сильно рандомными запросами) под нагрузкой, впрочем.

x3al ★★★★★
()
Ответ на: комментарий от x3al

И да, после filter ты получаешь не список, а Queryset, который емнип генератор (либо хорошо им притворяется). При потреблении ведёт себя примерно как список, впрочем.

x3al ★★★★★
()

А как быть со случаемя n-го количества последовательно связанных таблиц, связями типа ForeignKey?

Точно так же. D.objects.filter(b__a__field_two='something')

provaton ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.