web-dev-qa-db-ja.com

Django-外部キープロパティのフィルタリング

ForeignKeyの特定のフィールドの値に基づいてDjangoでテーブルをフィルタリングしようとしています。

たとえば、2つのモデルがあります。

class Asset(models.Model):
    name = models.TextField(max_length=150)
    project = models.ForeignKey('Project')

class Project(models.Model):
    name = models.TextField(max_length=150)

関連付けられたプロジェクトの名前に基づいてアセットリストをフィルター処理したいと思います。

現在、私はtwoクエリを実行しています:

project_list = Project.objects.filter(name__contains="Foo")
asset_list = Asset.objects.filter(desc__contains=filter,
                                  project__in=project_list).order_by('desc')

メインクエリにこの種のフィルタリングを指定する方法があるのだろうか?

80
Fraser Graham

Asset.objects.filter( project__name__contains="Foo" )

121
Fragsworth

これは、queryset-refactorブランチは1.0より前に上陸しました。 チケット4088 問題が公開されました。これは動作するはずです:

Asset.objects.filter(
    desc__contains=filter,
    project__name__contains="Foo").order_by("desc")

Django多対一ドキュメント には、Model APIを使用して外部キーを追跡するこの例と他の例があります。

13
Michael Greene
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インスタンスが作成されると想定しています。

SubjectおよびStudent Userモデルは、SubjectGradeモデルの外部キーです。

「available_subjects」では、現在のstudent_userとして「student」属性を持つすべてのsubjectgradeインスタンスをチェックすることにより、現在のstudent_userによってすでに登録されているすべてのサブジェクトを除外しました

PS。私の説明のためにまだ理解できない場合は、事前におologiesび申し上げます。これは私が提供できる最高の説明です。どうもありがとうございます

0
Kinowe