フィルタリングしたリレーションのデータを取得する

from django.db.models import Prefetch

person_prefetch = Prefetch('person', queryset=Person.objects.filter(name='test'))
company = Company.objects.prefetch_related(person_prefetch).get(pk=1)

for person in company.person.all():
   print(person.name)
Prefetchを使用すると、prefetch_relatedで取得するモデルに対してフィルタリングを行うことができます。
変数名 = Prefetch('リレーションのフィールド名', queryset=多側のモデルでのORM)

の形式で記入し、定義した変数をprefetch_related()の引数にすることでフィルタリングされたリレーションのデータのみを取得することができます。

Prefetchは第1引数は、リレーションのフィールド名、querysetは多側のモデルをどのようにするかを記入してください。
filterだけではなく、order_byで並べ替えたりexcludeで除外したりすることもできます。

上の例では、Companyモデルのpkが1のモデルに紐づいたPersonの中でnameフィールドがtestのデータだけを取得しています。