Vous n'êtes pas identifié(e).
Bonjour,
J'essaye de trouver comment faire une queryset sur une relation qui pointe sur la même table.
J'ai un champ children sur une table de la forme :
children = models.ManyToManyField('self',symmetrical=False,related_name='Cclass_children',blank=True,null=True)
Je souhaite pouvoir faire une requete sui recupérera toutes les enfant d'un enregistrement de la table.
Je n'ai pas trouvé de doc sur ce cas d'utilisation.
Merci pour les infos
Hors ligne
Si tu dois gérer des arbres, les bases de données ne sont pas vraiment
faites pour et il est recommandé d'utiliser des bibliothèques:
http://django-mptt.github.com/django-mptt/
Si tu ne veux que les décendents directs (sans récursivité ni rien)
normalement, .children.all() devrai faire l'affaire...
remarque, je changerai:
related_name='Cclass_children' -> related_name='parents'
2011/8/12 LiTiL_DiViL <ldsteph _AT_ free.fr>
> Bonjour,
> J'essaye de trouver comment faire une queryset sur une relation qui pointe
> sur la même table.
> J'ai un champ children sur une table de la forme :
> children =
>
> models.ManyToManyField('self',symmetrical=False,related_name='Cclass_children',blank=True,null=True)
>
> Je souhaite pouvoir faire une requete sui recupérera toutes les enfant
> d'un enregistrement de la table.
>
> Je n'ai pas trouvé de doc sur ce cas d'utilisation.
>
> Merci pour les infos
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Le 12/08/2011 11:29, LiTiL_DiViL a écrit :
> Bonjour,
> J'essaye de trouver comment faire une queryset sur une relation qui pointe
> sur la même table.
> J'ai un champ children sur une table de la forme :
> children =
> models.ManyToManyField('self',symmetrical=False,related_name='Cclass_children',blank=True,null=True)
>
> Je souhaite pouvoir faire une requete sui recupérera toutes les enfant
> d'un enregistrement de la table.
>
> Je n'ai pas trouvé de doc sur ce cas d'utilisation.
>
> Merci pour les infos
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Bonjour,
Il me semble que tu veux simplement faire
TABLE.objects.get(id=1).children.all() par exemple ou encore
Table.objects.filter(title="blabla").children.all().
Je te dit ça de tête, mais je crois que c'est un truc dans le genre
Hors ligne
Bonjour et merci pour vos réponses,
Malheureusement je n'y arrive pas j'ai un message d'erreur, j'ai créé un nouveau model de tests pour être sur mais cela ne fonctionne pas il doit y avoir quelque chose qui m'échappe :
Voila mon nouveau model
class Ctest (models.Model):
''' Modèle pour faire dest tests à effacer après usage.
'''
name = models.CharField(max_length=255)
children = models.ManyToManyField('self',symmetrical=False,blank=True,null=True )
(j'ai créé un petit jeu de test)
Quand je lance dans mon shell un queryset :
qs = Ctest.objects.get(id=1).children.all()
j'ai cette erreur :
FieldError: Cannot resolve keyword 'ctest' into field. Choices are: children, id, name
j'ai essayé de modifié cela dans tout les sens mais en vain
Hors ligne
Si tu dois gérer des arbres, les bases de données ne sont pas vraiment
faites pour et il est recommandé d'utiliser des bibliothèques:
http://django-mptt.github.com/django-mptt/Si tu ne veux que les décendents directs (sans récursivité ni rien)
normalement, .children.all() devrai faire l'affaire...>
En fait je débute à peine en python et django pour le moment, c'est très expérimental ce que je fait pas vraiment besoin d'optimiser les perf(en tout cas pour le moment).
Merci
Hors ligne