2010-08-23 6 views
2

J'ai besoin de lignes sélectionnées avec django orm. J'ai besoin équivalent d'une telle requêterequête avec django orm

select * from order where (user_from = u and f1 not is null) or (user_to = u and f2 not is null) 

J'essaie de faire de cette façon:

Order.objects.filter(user_from = self).exclude(f1 = None)+Order.objects.filter(user_to = self).exclude(f2 = None) 

Mais aucun syndicat dans ORM .. comment peut être telle tâche accomplie par ORM? (je vois une solution pour ajouter quelques champs dans mon modèle, mais il intresting pour le résoudre sans champs ajoutant)

+0

Pouvez-vous poster le code source du modèle 'Order'? –

Répondre

1

Regardez Q objects. Vous pouvez exécuter quelque chose comme:

Order.objects.filter(
    Q(user_from = u, f1__isnull = False) | Q(user_to = u, f2__isnull = False) 
) 

Attention: ce code est non testé. Ce serait une bonne idée de voir la requête SQL réelle générée et de vérifier que c'est bien ce dont vous avez besoin.

+0

Il obtient l'exception: Joignez-vous au champ 'to_url_placed_update' non autorisé. Avez-vous mal orthographié 'is_null' pour le type de recherche? Je le vois pour la première fois pour utiliser __is_null = False Vous shure cette fonctionnalité présente dans django orm? – Evg

+0

Mon erreur. 'is_null' aurait dû être' isnull'. Réponse évolutive. –

+0

cela fonctionne merci. – Evg