On ne sait pas très bien ce que vous demandez, mais en général, je recommande d'utiliser le filtre de Django car il est très puissant.
Disons que l'utilisateur sélectionne les options pour leur maison sur une page de formulaire et vous obtenez les informations avec
number_of_rooms = request.GET.get('number_of_rooms', 0)
area = request.GET.get('area', 0)
Vous auriez pas besoin des « si », mais plutôt une requête de filtre concis:
matching_house = Houses.objects.filter(number_of_rooms__gte=number_of_rooms, area__gte=area)
Ceci retournerait toutes les maisons avec au moins autant de pièces que l'utilisateur le souhaite, et au moins autant de surface.
Vous pouvez également permettre à l'utilisateur d'entrer une plage pour le nombre de chambres et de la zone:
min_number_of_rooms = request.GET.get('min_number_of_rooms', 0)
max_number_of_rooms = request.GET.get('max_number_of_rooms', 0)
min_area = request.GET.get('min_area', 0)
max_area = request.GET.get('max_area', 0)
Et puis étendre simplement les conditions de filtre en conséquence:
matching_house = Houses.objects.filter(number_of_rooms__gte=min_number_of_rooms, number_of_rooms__lte=max_number_of_rooms, area__gte=min_area, area__lte=max_area)
etc.
Vous pouvez en savoir plus à ce sujet dans le Django QuerySet API Reference
S'il vous plaît élaborer un peu afin que le PO peut comprendre pourquoi vous devriez le faire. – Surt
@Surt Filtre de base renverrait le jeu de requête basé sur la combinaison de & operator. Les objets Q peuvent renvoyer le jeu de requête basé sur le combiné en utilisant le & et | les opérateurs. –
@IbrahimK Ajoutez une explication sur les objets 'Q' dans votre réponse. Cela aidera le PO à comprendre votre réponse. Si le lien donné change à un moment donné, cela n'aidera pas les autres. – arulmr