2011-06-02 3 views
0

J'ai deux modèles. Commentaire et ses « sous commentaires »:Comment retourner le modèle et les modèles liés à ce modèle avec des relations plusieurs-à-plusieurs

class Comment(models.Model): 

    .... 
    author = models.CharField(max_length=80) 
    published = models.DateTimeField(auto_now_add=True) 
    email = models.EmailField(blank=True) 
    url = models.URLField(blank=True) 
    post = models.ForeignKey(Entry) 
    subcomments = models.ManyToManyField('Subcomment', blank=True) 
    .... 


class Subcomment(models.Model): 

    .... 
    author = models.CharField(max_length=80) 
    published = models.DateTimeField(auto_now_add=True) 
    email = models.EmailField(blank=True) 
    url = models.URLField(blank=True) 
    mcomment = models.ForeignKey(Comment) 
    .... 

J'essaie de faire RSS Abonnez-vous pour poster des commentaires. J'utiliser le code suivant:

class EntryCommentsFeed(Feed): 

    .... 
    def items(self, obj): 
     return Comment.not_spam.filter(post=obj).order_by('-published')[:15] 
    .... 

Mais elle ne renvoie que des commentaires sans sous commentaires, et je n'ai aucune idée comment retourner se commenter avec son «sous commentaires et triez par date.

Répondre

0

Ce n'est pas possible. Les querysets de modèles ne sont jamais composés que d'objets de ce type de modèle. Vous pouvez parcourir les retournés Comment s et obtenir les Subcomment s pour chacun, si:

for comment in Comment.not_spam.filter(post=obj).order_by('-published')[:15]: 
    subcomments = comment.subcomment_set.all() 
+0

Oui, cela fonctionne. J'espérais avoir une meilleure solution. Merci pour la réponse =] – bosha

+0

Étrange .. J'ai défini la fonction - http://pastie.org/private/6oo8ttmawyfrkd21ouyhq, mais l'erreur de retour django - http://pastie.org/private/z59dl06elgsafwnpx4wlfa. Chose étrange est que, les deux modèles ont get_absolute_url .. – bosha

+0

Pas si étrange. L'application flux attend un seul ensemble de requêtes itératif. Vous lui avez passé une liste de querysets. Ça ne va pas marcher. Utilisez 'itertools.chain' pour combiner les deux jeux de requêtes (http://docs.python.org/library/itertools.html#itertools.chain). Sachez, cependant, qu'il n'y aura aucune hiérarchie dans votre flux, c'est-à-dire que les sous-commentaires ne seront pas associés aux commentaires. Tout sera juste en ligne. –

Questions connexes