J'essaie de filtrer une table dans Django en fonction de la valeur d'un champ particulier d'un ForeignKey
.
Par exemple, j'ai deux modèles:
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 souhaite filtrer ma liste d'actifs en fonction du nom du projet associé.
Actuellement, j'effectue deux requêtes:
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?
django
django-models
django-queryset
Fraser Graham
la source
la source
contains
décrit le type de comparaison utilisé dans la requête que l'ORM django produit, le sql ressemblera probablementLIKE '%Foo%'
.Cela a été possible depuis que la
queryset-refactor
branche a atterri avant la version 1.0. Le ticket 4088 a révélé le problème. Cela devrait fonctionner:La documentation Django Many-to-one contient ceci et d'autres exemples de clés étrangères suivantes à l'aide de l'API de modèle.
la source
Dans mon application ci-dessus, je suppose qu'une fois qu'un étudiant est inscrit, une instance SubjectGrade sera créée qui contient la matière inscrite et l'étudiant lui-même.
Le modèle utilisateur sujet et étudiant est une clé étrangère du modèle SubjectGrade.
Dans "available_subjects", j'ai exclu toutes les matières qui sont déjà inscrites par le student_user actuel en vérifiant toutes les instances subjectgrade qui ont l'attribut "student" comme étant le student_user actuel
PS. Toutes mes excuses à l'avance si vous ne pouvez toujours pas comprendre à cause de mon explication. C'est la meilleure explication que je puisse fournir. Merci beaucoup
la source