2017-07-20 2 views
0

Je possède ce code djangoDjango vérifier si QuerySets sont égaux

q1 = MyModel.objects.all() 
q2 = MyModel.objects.all() 

lorsque je tente

print q1 == q2 

Je reçois que les résultats

False 

Alors, comment puis-je vérifier si deux QuerySets le résultat est en django sont égaux?

Répondre

1

Vous pouvez convertir les QuerySets aux listes et vérifier si elles sont égales:

list(q1) == list(q2) 
+0

Génial, c'est ce dont j'ai besoin, fonctionne – Touhami

+1

La commande n'est pas garantie, donc ça ne marchera pas forcément - même si ça se résume à "est-ce que tu considères des queries avec le même contenu mais un ordre différent ou pas"? –

+0

Dans votre exemple, vous n'êtes toujours pas certain que l'ordre inverse du jeu de requête aura un ordre différent du jeu de requête non inversé. La commande n'est pas garantie avant d'appeler reverse(), vous n'avez donc aucune idée de l'ordre qui est inversé. L'ajout d'une commande permet de résoudre ce problème et de lever l'ambiguïté. https://stackoverflow.com/questions/7163640/what-is-the-default-order-of-a-list-returned-from-a-django-filter-call#7164126 –

0

Vous pouvez voir par .count() ou:

q1 = Model.objects.all() 
q2 = Model.objects.all() 
equal = True 
for idx, q in q1: 
    if q != q2[idx]: 
     equal = False 
print(equal) 
+0

pas que la comparaison 'count()' va seulement vérifier que les querysets ont le même nombre d'éléments. Il ne vérifiera pas s'il s'agit des mêmes éléments ou s'ils sont dans le même ordre. – Alasdair