W jaki sposób można filtrować model na podstawie modelu, który się z nim wiąże? Przykład poniżej ... to działa, ale myślę, że to trafia do DB dwukrotnie i jest dość nieelegancki. Czy istnieje sposób, aby zrobić to bezpośrednio z zapytaniami? Może w jakiś sposób z select_related()
, ale nie udało się tego wymyślić. Chcę zwrócić QuerySet
z Project
.Filtr zapytań Django dla powiązanych ze sobą pól
from django.db import models
class Person(models.Model):
pass
class Project(models.Model):
pass
class Action(models.Model):
person = models.ForeignKey(Person)
project = models.ForeignKey(Project)
# Better way to do this?
def projects_by_person(person):
actions = Action.objects.filter(person=person)
project_ids = actions.values_list('project')
return Project.objects.filter(id__in=project_ids)
W rzeczywistości powinno to być tylko jedno trafienie w bazie danych, ponieważ filtr zostanie wykonany jako pod-zapytanie. Niemniej jednak, stosowanie Raunak sugeruje, że użycie podwójnej podkreślonej składni jest lepszym rozwiązaniem. –
Dobrze wiedzieć. Łączenie powinno wykonać się nieco szybciej niż podzapytanie w (...). Dzięki! – pyrospade