2010-07-09 2 views
1

Existe-t-il un moyen de transformer un QuerySet en un objet Q dans django?Django - Comment transformer un QuerySet en un objet Q?

Ma motivation spécifique: Je voudrais soustraire un QuerySet (qs_A) d'un autre QuerySet (qs_B). La seule façon de penser à cela est d'utiliser exclude() et un équivalent Q de qs_A.

Exemple:

def my_function(qs_A, qs_B): 
    # Here I need to transform qs_A to a Q object q_obj_A 
    qs_new = qs.exclude(q_obj_A) 
    return qs_new 

Répondre

5

Vous n'avez pas besoin d'un objet Q. Il suffit d'exclure la deuxième queryset:

qs = qs_a.exclude(id__in=qs_B) 
+1

C'est simple et fonctionnerait, mais je pense qu'il est moins efficace et plus db intensive, au moins dans de nombreux cas, que d'avoir fait un objet Q qui représente une condition simple. – Jonathan

+1

L'optimisation prématurée est la racine de tous les maux. Ou à tout le moins, mauvais. –

+0

@Matthew - voulez-vous dire que django est un framework web prématuré ?! Ou voulez-vous dire que mon projet est prématuré ?! – Jonathan

Questions connexes