Django – filtrage sur les propriétés de la clé étrangère

J’essaie de filtrer une table dans Django en fonction de la valeur d’un champ particulier d’une clé étrangère.

Par exemple, j’ai deux modèles –

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

Je voudrais filtrer ma liste d’actifs en fonction du nom du projet associé.

Actuellement, j’exécute deux requêtes:

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

Je me demande s’il existe un moyen de spécifier ce type de filtrage dans la requête principale?

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

Cela a été possible depuis que la twig queryset-refactor est arrivée avant la version 1.0. Le ticket 4088 a exposé le problème. Cela devrait fonctionner:

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

La documentation plusieurs-à-un de Django a ceci et d’autres exemples de clés étrangères suivantes utilisant l’API de modèle.