2011-06-11 5 views
0

J'ai utilisé le processeur de gabarit en utilisant la relation suivante. Dans le shell il fonctionne bien, mais dans la vue je une erreur:Les relations suivantes "en arrière" dans le processeur de contexte

'ParentCategory' object has no attribute 'postpages_set'

modèle

(un peu plus simple que l'original)

class ParentCategory(models.Model): 
    category = models.CharField(max_length = 150) 


class PostPages(models.Model): 
    parent_category = models.ForeignKey('ParentCategory', 
            blank = True, 
            null = True,          
            related_name = "parent_category") 
    title = models.CharField(max_length = 150) 
    text = models.TextField() 

contexte processeur

from shivablog.shivaapp.models import ParentCategory 

def menu_items(request): 
    output_categories = {} 
    category_list = ParentCategory.objects.all() 
    for category in category_list: 
     output_categories[category] = category.postpages_set.all() 
    return {'output_categories': output_categories} 

dans le shell:

>>> output = {} 
>>> cat_list = ParentCategory.objects.all() 
>>> for cat in cat_list: 
...  output[cat] = cat.postpages_set.all() 
... 
>>> output 
{<ParentCategory: category#1>: [<PostPages: Post 1>, <PostPages: post 2>],   <ParentCategory: category #2>: [], <ParentCategory: category #3>: []} 

Ce qui se passe faux? Quelle différence entre shell et vue de cette manière?

Répondre

1

Vous avez explicitement renommé le gestionnaire des objets connexes, en utilisant related_name, il est maintenant appelé parent_category:

cat.parent_category.all() 

Ceci est bien sûr un nom trompeur - Je ne sais pas pourquoi vous avez mis related_name à tout.

En ce qui concerne pourquoi il n'apparaît pas dans le shell, je ne peux que supposer que vous avez fait les changements dans le code sans redémarrer votre shell.

Enfin, cependant, je ne sais pas pourquoi vous voulez faire cela, comme vous pouvez aussi accéder facilement aux objets associés dans le modèle:

{% for category in output_categories %}{{ category.parent_category.all }}{% endfor %} 
+0

Merci vous, je l'ai fait beaucoup plus propre avec ton conseil. Pour plus d'informations, j'ai utilisé votre blog. C'est assez expliqué en détail. – I159

Questions connexes