Est-il possible de passer des lignes de champs connexes dans les fonctions de base de données django et si oui, comment puis-je accomplir cela? Quand j'essaye, je finis par obtenir un nombre entier (la colonne d'identification) au lieu de la rangée.Passage de ligne connexe à la fonction de base de données Django
Modèles:
class ModelA(models.Model):
pass
class ModelB(models.Model):
pass
class ModelC(models.Model):
model_a_rel = models.ManyToManyField(
ModelA,
related_name='m2mrelatedobj'
)
fkobj = models.ForeignKey(
ModelB
)
queryset désiré:
ModelA.objects.annotate(
my_annotation=DatabaseFn('m2mrelatedobj__model_a_rel')
).filter(my_annotation=True)
Mon but est de passer lignes de fkobj
en DatabaseFn
de sorte que la jointure se fait une fois au queryset et pas à l'intérieur de chaque annotation .
Est-ce encore possible dans django? En ce moment, je reçois une erreur de ma fonction postgres disant qu'il a reçu un nombre entier au lieu d'une ligne, qui communique que django ne fait pas la jointure supplémentaire. Toute idée serait très appréciée, merci.
environnement: Django v1.10.3, python 2.7, postgresql 9.5
Merci pour la réponse, mais est la syntaxe que je montre dans mon exemple qui ne fonctionne pas. Le problème est que je ne veux pas énumérer chaque colonne (comme dans votre deuxième exemple), et je veux des objets liés à la clé étrangère de l'objet lié m2m. Votre solution donnera des champs de l'objet m2m ou des champs de l'objet fk – chukkwagon
je vois. Je serais très intéressé par une réponse qui n'a pas besoin d'énumérer toutes les colonnes aussi. En attendant ça ici;). Pour la deuxième remarque, vous pouvez continuer à faire double trait de soulignement pour obtenir fk lié à l'objet m2m: ModelA.objects.all(). Values ('m2mrelatedobj__ModelC1_FK_name__FK_filed_name'). À votre santé! – Tico