10
votes

Django Orm: Voir si un modèle n'a pas d'entrée de clé étrangère dans un autre modèle

Donc, j'ai ce 2 modèles: xxx

et un autre: xxx

existe un moyen d'obtenir les sites qui n'ont aucune entrée dans le siteInfo?


0 commentaires

3 Réponses :


15
votes

site.ObjectS.filter (siteInfo__isnull = true)


5 commentaires

Je n'ai pas le code maintenant à côté de moi pour tester votre idée, mais je vois que vous tremblez tous les sites qui ont la colonne de site comme null ... donc je présume que vous vouliez dire siteInfo.


J'ai besoin de chaque entrée sur siteInfo pour avoir une corrélation de site. Je suis intéressé de savoir quels sites n'ont pas encore défini de siteInfo. Votre suggestion va-t-elle travailler pour cela?


Je vous ai mal interprété la question. :-) Voici une solution correcte. "Pour faire référence à une relation" inverse ", utilisez simplement le nom minuscule du modèle". Docs


Cela ressemble plus à ça! Je ne savais pas à ce sujet. Je vais le tester dès que je peux. Merci!


Je devais ajouter .Distit () comme je voudrais obtenir des doublons autrement.



-4
votes

Je pense que cela fonctionnera, mais pas si efficace:

with_no_site_info = [Site pour site sur site.Object.All () Si site.site_infos_set.all (). Compte () == 0]


3 commentaires

Je suis d'accord avec Drtyrsa sur celui-ci. Si j'ai 1000 sites et plus de sites, il souffle par serveur avec des requêtes.


«Je pense que cela fonctionnera, mais pas si efficace:« J'ai dit cela avant de l'avoir écrit, pensant que vous avez 1000 sites.


Je comprends. Merci quand même pour votre idée;)



0
votes

Il existe une manière générique de trouver la liste de toutes les relations inverse d'un modèle.

reverse_model_array = [f.related_model for f in model._meta.get_fields() 
if f.auto_created and not f.concrete]


0 commentaires