2009-12-28 5 views
0

comment puis-je exécuter cette requête dans django:Django requête SQL spécifique

SELECT * FROM keywords_keyword WHERE id not in (SELECT keyword_id FROM sites_pagekeyword) 

Dans la dernière version SVN nous pouvons utiliser:

keywords = Keyword.objects.raw('SELECT * FROM keywords_keyword WHERE id not in (SELECT keyword_id FROM sites_pagekeyword)') 

Mais RawQuerySet ne supporte pas le filtre(), compte(), l'indexation et d'autres choses. Y a-t-il un autre moyen?

Répondre

8

Keyword.objects.exclude (id__in = PageKeyword.objects.all()

Keyword.objects.exclude(id__in=PageKeyword.objects.values('keyword_id')) 

Pour référence ultérieure, exclude is documented here


Edit:. Oui , tu as raison, j'ai corrigé ma réponse, voir ci-dessus


Edit: Encore plus lisible:

Keyword.objects.exclude(pagekeyword__in=PageKeyword.objects.all()) 
+0

Oui merci, j'ai oublié d'exclure() –

1

Je l'ai testé votre code et il fonctionne pas comme prévu, est ici la bonne solution pour ma tâche:

Keyword.objects.exclude(id__in=PageKeyword.objects.values('keyword_id')) 
+0

Oui, vous avez raison. J'ai corrigé ma réponse. Désolé pour ça. – cethegeek

+0

En fait, je pense que la dernière édition de ma réponse la rend encore plus lisible ... – cethegeek