Disons que j'ai deux modèles Django Personne et compagnie comme suit: -
class Company(models.Model): name = models.CharField() class Person(models.Model): last_name = models.CharField(blank=True) first_name = models.CharField() company = models.ForeignKey(Company, null=True, blank=True)
3 Réponses :
Il devrait être aussi simple que:
@classmethod def list_unaffiliated_people(cls): return cls.objects.extra(where=['company_id IS NULL'])
Essayé dans la coquille, cela me donne Fielderror: ne peut pas résoudre le mot-clé «Company_id» dans le champ. Les choix sont: Société, Nom, Last_Name
Hrm. Je pensais qu'il était possible d'interroger sur la clé comme ça. Je suppose que c'est de retour à la planche à dessin sur celui-ci.
Ce n'est pas possible. société__id__isnull code> serait valide, mais générerait à peu près le même SQL.
@AYAZ, ARBAST faisait référence à Company_ID (Un soulignement unique). Je pense que vous parlez de la compagnie__id (double soulignement)
@chefsmart: C'est correct. Je voulais souligner que la façon dont société_id code> est référencé dans une méthode QuerySet ne fonctionne pas seulement de ne pas fonctionner mais donnez également une erreur.
django traitera null code> comme l'objet
de Python code> SO:
Person.objects.filter(company = None)
Cela donne également le même SQL. Je suppose que la façon dont Django le fait n'est pas si mal après tout. Je me concentrerai sur la façon dont je peux améliorer mes autres recherches et voir si je peux résoudre mon problème.
Eh bien, cette question est ancienne et bientôt le patch sera à Django. Mais pour le bref entre-temps, la réponse est dans http://code.djangoproject.com/ticket/10790 A>: p>
Solution de contournement: au lieu de p>
utiliser p>
personne.ObjectS.filter (société = aucun) code> p>
personne.Object.exclude (société__isnull = false) code> p>
blockQuote>
Eh bien, si cela n'a pas de sens pour vous, il s'agit en fait d'une requête «de base» qui se met à l'intérieur avec d'autres requêtes, ce qui conduit à des résultats bizarres et répétitifs.
Cette question est vraiment un résultat d'un bloc mental.