149

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

たとえば、次の 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)

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

現在、次の 2 つのクエリを実行しています。

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

メインクエリでこの種のフィルタリングを指定する方法があるかどうか疑問に思っていますか?

4

3 に答える 3

224
Asset.objects.filter( project__name__contains="Foo" )
于 2009-12-30T18:07:54.260 に答える
21

queryset-refactorこれは、ブランチが 1.0 より前に上陸し て以来可能でした。チケット 4088で問題が明らかになりました。これはうまくいくはずです:

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

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

于 2009-12-30T18:07:37.537 に答える