Próbuję przefiltrować tabelę w Django na podstawie wartości określonego pola ForeignKey
.
Na przykład mam dwa modele:
class Asset(models.Model):
name = models.TextField(max_length=150)
project = models.ForeignKey('Project')
class Project(models.Model):
name = models.TextField(max_length=150)
Chciałbym przefiltrować listę zasobów na podstawie nazwy powiązanego projektu.
Obecnie wykonuję dwa zapytania:
project_list = Project.objects.filter(name__contains="Foo")
asset_list = Asset.objects.filter(desc__contains=filter,
project__in=project_list).order_by('desc')
Zastanawiam się, czy istnieje sposób na określenie tego rodzaju filtrowania w głównym zapytaniu?
django
django-models
django-queryset
Fraser Graham
źródło
źródło
contains
opisuje typ porównania użyty w zapytaniu, które generuje ORM django, prawdopodobnie sql będzie wyglądaćLIKE '%Foo%'
.Było to możliwe, ponieważ
queryset-refactor
gałąź wylądowała przed 1.0. Bilet 4088 ujawnił problem. To powinno działać:Dokumentacja Django Wiele do jednego zawiera ten i inne przykłady stosowania kluczy obcych przy użyciu interfejsu API modelu.
źródło
W powyższym wniosku zakładam, że po zarejestrowaniu studenta zostanie utworzona instancja przedmiotu SubjectGrade, która będzie zawierała zarejestrowany przedmiot i samego ucznia.
Model podmiotu i użytkownika ucznia jest kluczem obcym do modelu SubjectGrade.
W „available_subjects” wykluczyłem wszystkie przedmioty, które są już zarejestrowane przez obecnego student_user, zaznaczając wszystkie wystąpienia przedmiotów, które mają atrybut „student” jako bieżący student_user
PS. Przepraszamy z góry, jeśli nadal nie możesz zrozumieć z powodu mojego wyjaśnienia. To najlepsze wyjaśnienie, jakie mogę podać. Dziękuję bardzo
źródło