Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 6, 2014 07:35:16

myarik
Зарегистрирован: 2012-11-20
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно сделать QuerySet

Здравствуйте.

Подскажите как правильно сделать запрос. Есть следующая структура

class Model1(models.Model):
    name = models.CharField()
    ....
class Model2(models.Model):
    model1 = models.ForeignKey(Model1)
    name = models.CharField()
    model3 = models.ForeignKey(Model3)
    ...
class Model3(models.Model):
    name = models.CharField()
    ...

Задача следующая, у меня есть список primary key для значений из третей модели
LIST = [2,23,54]
Нужно найти все значение Model1 которые имеют посылания на все элементы из списка. Пока реализовал так, но не думаю что это правильно

pk_list = None
for value in LIST:
    if pk_list:
        pk_list = Model2.objects.filter(
            model3__pk=value,
            model1_id__in=pk_list).values_list(
                'model1_id', flat=True)
    else:
        pk_list = Model2.objects.filter(
            model3__pk=value).values_list(
                'model1_id', flat=True)

Спасибо.

Офлайн

#2 Сен. 7, 2014 13:26:52

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

Как правильно сделать QuerySet

То что вы написали, это ManyToMany with extra fields

Model1.objects.filter(model2__model3__pk__in=LIST)

Офлайн

#3 Сен. 8, 2014 07:39:57

myarik
Зарегистрирован: 2012-11-20
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно сделать QuerySet

Спасибо за ответ.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version