특정 필드의 값을 기반으로 Django에서 테이블을 필터링하려고합니다 ForeignKey
.
예를 들어, 두 가지 모델이 있습니다.
class Asset(models.Model):
name = models.TextField(max_length=150)
project = models.ForeignKey('Project')
class Project(models.Model):
name = models.TextField(max_length=150)
연결된 프로젝트의 이름을 기준으로 자산 목록을 필터링하고 싶습니다.
현재 두 가지 쿼리를 수행 하고 있습니다.
project_list = Project.objects.filter(name__contains="Foo")
asset_list = Asset.objects.filter(desc__contains=filter,
project__in=project_list).order_by('desc')
기본 쿼리에서 이러한 종류의 필터링을 지정하는 방법이 있는지 궁금합니다.
답변
Asset.objects.filter( project__name__contains="Foo" )
답변
이는 queryset-refactor
브랜치가 1.0 이전에 출시 된 이후로 가능 했습니다. 티켓 4088 이 문제를 노출했습니다. 이것은 작동합니다.
Asset.objects.filter(
desc__contains=filter,
project__name__contains="Foo").order_by("desc")
장고 대일 문서는 이것과 모델의 API를 사용하여 외부 키를 다음의 다른 예를 가지고있다.
답변
student_user = User.objects.get(id=user_id)
available_subjects = Subject.objects.exclude(subject_grade__student__user=student_user) # My ans
enrolled_subjects = SubjectGrade.objects.filter(student__user=student_user)
context.update({'available_subjects': available_subjects, 'student_user': student_user,
'request':request, 'enrolled_subjects': enrolled_subjects})
위의 신청서에서 학생이 등록되면 등록 된 과목과 학생 자신을 포함하는 과목 SubjectGrade 인스턴스가 생성된다고 가정합니다.
주제 및 학생 사용자 모델은 SubjectGrade 모델에 대한 외래 키입니다.
“available_subjects”에서 현재 student_user로 “student”속성이있는 모든 과목 등급 인스턴스를 확인하여 현재 student_user가 이미 등록한 모든 과목을 제외했습니다.
추신. 제 설명 때문에 여전히 이해가 안된다면 미리 사과드립니다. 이것이 내가 제공 할 수있는 가장 좋은 설명입니다. 정말 고맙습니다