2016-08-26 4 views
1

Я утерян здесь. Мне нужно сгенерировать запрос (qs), состоящий из значений, обозначенных внешними ключами другого qs (искал его здесь, получил лысый в процессе ...).Создайте запрос из значений ForeignKey

Теперь, скажем, у меня есть простые модели:

class User(models.Model): 
    name = models.CharField() 

class Comment(models.Model): 
    user = models.ForeignKey(User, related_field="comments") 

    def __str__(self): 
     return "%s's comment"%self.user.name 

Что у меня есть, QS состоит из (много) специально отобранных Комментарии. Скажи:

[<Comment: "user_A's comment">,<Comment: "user_B's comment">,...]

И мне нужно генерировать QS состоят из пользователей из значений указываемого моих предыдущих QS «s внешних ключей. Теперь, я не могу просто использовать values('user'), чтобы получить список, так как в результате QS должен выполнить дополнительные операции в дб, например, объединение с другими пользователями QS, фильтрация и т.д.

Я также пробовал для принудительного выполнения процесса с помощью .raw() с некоторым успехом, но затем я получаю объект rawQuerySet, который я тоже не могу использовать.

Посмотрите на документацию о extra() и select_related() материалах, я думал, что может быть какой-то способ, но я не могу понять это.

ответ

0

После того, как я попробовал вещи, я нашел способ сделать именно то, что хочу. Хотя подход может быть немного неэффективным, так как db нужно ударить несколько раз, результат находится в правильном формате (набор запросов). Для тех, кто сталкивается с таким же вопросом, вот способ создания QuerySet из пользователей из значений указывали на ForeignKeys, учитывая другой QuerySet, скажем, комментариев:

some_users_queryset = User.objects.filter(comments__pk__in=some_comments_queryset) 
some_users_queryset = some_users_queryset.distinct() 

Как я уже говорил, я не думаю, этот способ является наиболее эффективным, но я хотел бы ограничить использование чистого SQL во время игры с Django.

Конечно, я хотел бы услышать о лучшем, более быстром способе достижения такого же результата.