web-dev-qa-db-fra.com

comment créer un ensemble de requêtes vide et ajouter des objets manuellement dans django

J'ai besoin de créer un ensemble de requêtes et d'ajouter manuellement certains objets que j'ai obtenus à partir des résultats de différentes requêtes afin de l'afficher dans un tableau. J'utilise xx = set () mais cela ne fait pas l'affaire.

22
user2137817

Vous pouvez le faire de l'une des manières suivantes:

from itertools import chain
#compute the list dynamically here:
my_obj_list = list(obj1, obj2, ...)
#and then 
none_qs = MyModel.objects.none()
qs = list(chain(none_qs, my_obj_list))

Vous pourriez également faire:

none_qs = MyModel.objects.none()
qs = none_qs | sub_qs_1 | sub_qs_2

Cependant, cela fonctionnerait pas pour les ensembles de requêtes en tranches

24
karthikr

Tu ne peux pas faire ça. Un ensemble de requêtes est une représentation d'une requête de base de données. Vous ne pouvez pas y ajouter d'éléments manuellement.

Mais si vous avez besoin d'une collection ordonnée arbitrairement d'instances de modèle, utilisez simplement une liste.

11
Daniel Roseman

Je suis vraiment en retard à celui-ci, mais pour une référence future, vous pouvez créer un ensemble de requêtes avec tous les filtres pour les objets qui ont une propriété particulière.

Filtrage sur les propriétés des objets de champ

Model.objects.filter(foo='bar')
Model.objects.exclude(foo='bar')

Filtrage sur les propriétés d'objet non-champ

def return_queryset_with_desired_objects(self):
    qs = SomeModel.objects.all()
    wanted_ids = [obj.id for obj in qs if obj.foo]
    return self.filter(id__in=wanted_ids]

def return_queryset_without_undesired_objects(self):
    qs = SomeModel.objects.all()
    unwanted_ids = [obj.id for obj in qs if not obj.foo]
    return self.exclude(id__in=unwanted_ids]
9
lukeaus