créer manuellement un QuerySet Django ou plutôt ajouter manuellement des objets à un QuerySet
fondamentalement, j'ai besoin d'un moyen gracieux pour faire ce qui suit: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2_qs = QuerySet(model=Model2, qs_items=[obj1.model2,obj2.model2])
Je ne pense peut-être pas bien, mais faire quelque chose comme ça me semble infiniment stupide.: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
model2_qs = Model2.objects.filter(pk=obj1.model2.pk)
Oui, j'ai besoin de finir avec un QuerySet de Model2 pour une utilisation ultérieure (spécifiquement pour passer à une forme Django).
Dans le premier bloc de code ci-dessus,même si j'utilise filter
au lieu de get
je vais évidemment avoir un Queseryset de Model1. Les recherches inversées ne sont pas toujours possible dans mon cas.
4 réponses
si vous cherchez simplement à créer un queryset d'articles que vous choisissez à travers un processus compliqué non représentatif en SQL, vous pouvez toujours utiliser le __in
opérateur.
wanted_items = set()
for item in model1.objects.all():
if check_want_item(item):
wanted_items.add(item.pk)
return model1.objects.filter(pk__in = wanted_items)
pour ajouter manuellement des objets à un QuerySet, essayez _result_cache
:
objs = ObjModel.objects.filter(...)
len(objs) #or anything that will evaluate and hit the db
objs._result_cache.append(yourObj)
PS: je n'ai pas compris (ou essayé de comprendre) la question de chefsmart mais je crois que cela répond à la question du titre.
Vous ne pouvez pas ajouter manuellement des objets à un répertoire. Mais pourquoi ne pas vous mettre dans une liste ?
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2 = list(obj1, obj2)