2010-06-27 9 views
1

Je veux faire un "calendrier" contenant tous les messages de mini blog d'un utilisateur, et tous les utilisateurs qu'il suit. Je souhaite que tous ces posts soient triés par date., Mais comment puis-je 'joindre' les posts, car la relation 'following' est dans une autre table, donc je dois faire une sorte de jointure entre les deux tables, pour prendre les données.Django 'chronologie'

Pour l'instant, dans mon « timeline », il semble que les messages du blog du propriétaire du blog, et l'utilisateur I une requête comme:

 blog = New.objects.filter(created_by = request.user) 

mais je veux y rejoindre les messages avec les messages des personnes qu'il suit, c'est-à-dire:

following = Relations.objects.filter(initiated_by = request.user) 

où Relations est la table 'Follow relation'.

Comment puis-je le faire?

Mes modèles:

class New(models.Model): 
post = models.CharField(max_length=120) 
date = models.DateTimeField(auto_now_add=True) 
created_by = models.ForeignKey(User, blank=True) 
objects = NewManager() 


class Relations(models.Model): 
initiated_by = models.ForeignKey(User, editable=False, related_name = 'initiator') 
date_initiated = models.DateTimeField(auto_now=True, editable = False) 
follow = models.ForeignKey(User, editable = False, related_name = "follow") 
date_follow = models.DateTimeField(auto_now=True, editable = False) 

Répondre

2

Peut-être quelque chose comme (en utilisant Q objects):

blogs = New.objects.filter(Q(created_by = request.user) | Q(relations_set__initiated_by = request.user)) 

Cela suppose que vous avez une clé étrangère Relations-New. Voir the documentation about following relationships backward.

Si votre modèle Relations ne dispose pas d'une clé étrangère à New mais une clé étrangère à la table des utilisateurs, par exemple following = models.ForeignKey(User), vous pouvez peut-être faire quelque chose comme

blogs = New.objects.filter(Q(created_by = request.user) | Q(created_by__follow__initiated_by = request.user)) 

Maintenant, votre clé étrangère de la Relations modèle au modèle utilisateur doit avoir related_name = 'follow'.

+0

hmm ... je ne peux pas utiliser d'expressions dans les objets Q. il dit: "mot-clé ne peut pas être une expression" – dana

+1

Mon erreur, le point dans relations_set.initiated_by aurait dû être un double trait de soulignement, puisqu'il s'agit d'un argument mot-clé à Q. Je l'ai corrigé. – muksie

+0

maintenant il dit: "Impossible de résoudre mot-clé 'relations_set' dans le champ.Les choix sont: created_by, date, id, post, réponse, vote" signifiant les champs appartenant à la table 'Nouveau'. Il ne laisse pas de requête sur les champs d'une autre table, bien que je fasse une jointure ... :( – dana

Questions connexes