2011-07-15 25 views
38

Эй, я просмотрел некоторые сообщения similar здесь, на SO, но havent нашел все, что разрешило мою проблему. У меня есть следующие модели,Объект «СвязанныйManager» не является итерируемым Django

from django.db import models 

class Areas(models.Model): 

    name = models.CharField(max_length = 120) 
    order_in_sidebar_network = models.IntegerField(blank=True, null=True) 
    order_in_section_network = models.IntegerField(blank=True, null=True) 


    def __unicode__ (self): 
     return self.area_name 

    class Meta: 
     verbose_name_plural = "Areas" 
     verbose_name = "Area" 

class Countries(models.Model): 
    name = models.CharField(max_length = 120, help_text = "The name of the country") 
    area = models.ForeignKey(Areas, verbose_name = 'Area') 

    def __unicode__ (self): 
     return self.name 

    class Meta: 
     verbose_name_plural = "Countries" 
     verbose_name = "Country" 
     ordering = ['name'] 



class Offices(models.Model): 
    country = models.ForeignKey(Countries, verbose_name = 'Country') 
    name = models.CharField(max_length = 255, help_text = "The name of this office, IE London") 
    main_office = models.BooleanField(default= False, help_text = "Is this office a key location?", verbose_name = "Key Location") 
    address_1 = models.CharField(max_length = 255, null = True, blank = True) 
    address_2 = models.CharField(max_length = 255, null = True, blank = True) 
    address_3 = models.CharField(max_length = 255, null = True, blank = True) 
    city = models.CharField(max_length = 255, null = True, blank = True) 
    postcode = models.CharField(max_length = 20) 
    tel = models.CharField(max_length = 30, null= True, blank = True, help_text = "Optional telephone contact number") 
    mobile = models.CharField(max_length = 30, null= True, blank = True, help_text = "Optional mobile contact number") 
    fax = models.CharField(max_length = 30, null= True, blank = True, help_text = "Optional fax contact number") 
    data_1 = models.CharField(max_length = 255, null = True, blank = True, help_text = "Optional additional data", verbose_name = "Additional information") 
    data_2 = models.CharField(max_length = 255, null = True, blank = True, help_text = "Optional additional data", verbose_name = "Additional information") 

    class Meta: 
     verbose_name_plural = "Offices" 
     verbose_name = "Office" 
     ordering = ['name'] 

    def __unicode__(self): 
     return self.name 

class OfficeMembers(models.Model): 
    name = models.CharField(max_length = 60, help_text = "Please tell us this person name") 
    title = models.CharField(max_length = 100, help_text = "The person's title, IE Managing Director") 
    email = models.EmailField(max_length = 255, null = True, blank = True, help_text = "Optional email address for this person") 
    email2 = models.EmailField(max_length = 255, null = True, blank = True, help_text = "Optional second email address for this person") 
    phone = models.CharField(max_length = 30, null = True, blank = True, help_text = "Optional contact number for this person") 
    mobile = models.CharField(max_length = 30, null = True, blank = True, help_text = "Optional mobile contact number for this person") 
    office = models.ForeignKey(Offices, null = True) 
    class Meta: 
     verbose_name_plural = "Office Memebers" 
     verbose_name = "Office memebr" 
     ordering = ['name'] 

    def __unicode__(self): 
     return self.name 

я следующий вид настройки

def index(request): 

    cache_key = "world_areas" 
    cache_time = 60 

    world_areas_cache = cache.get(cache_key) 

    #if no cache is set, grab the objects, and set the cache 

    logger.debug(world_areas) 
    if not world_areas_cache: 
     logger.info('No cache found grabbing objects') 
     world_areas = Areas.objects.select_related().all() 
     #cache.set(cache_key, world_areas, cache_time) 
     logger.debug(world_areas) 
    else: 
     logger.info("Getting from cache") 
     world_areas = world_areas_cache 

    return render_to_response('network/index.html', {'world_areas':world_areas}, context_instance=RequestContext(request)) 

пытается перебрать на world_areas объект как так

{% for area in world_areas %} 

выдает ошибку синтаксиса шаблона

Объект 'RelatedManager' не является итерируемым

У кого-нибудь есть идеи, почему это хаппинг? действительно не может обойти это! strangley это работает для меня в оболочке: S я пропущу что-то очевидное ???

Большое спасибо всем, кто может помочь!

+0

Вы пытались очистить кеш? –

+0

Да, попробовал кеш! –

+1

Значит, вы уверены, что ничего не читаете из кеша? –

ответ

8

В общем, лучше использовать values или values_list для передачи данных из набора запросов к шаблону.

world_areas = Areas.objects.select_related().all().values_list('name', 'order_in_sidebar_network', ...) 

Отъезд Django docs для информации о том, как использовать функцию values, если вы не использовали его раньше.

101

Callall() для извлечения элементов из диспетчера.

{% for area in world_areas.all %} 
+4

Это хорошее решение. пожалуйста, отметьте как принято. вы также можете фильтровать здесь. –

+3

+1 и удивляться, почему это не принято в качестве ответа ?? – andi

+0

потому что ответили на 2 года позже. – user1040495

Смежные вопросы