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.