web-dev-qa-db-fra.com

L'objet 'RelatedManager' n'est pas itérable Django

Hé, j'ai parcouru quelques articles similaires ici sur SO mais je n'ai rien trouvé qui ait résolu mon problème. J'ai les modèles suivants,

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

j'ai la vue suivante configurée

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))

essayer d'itérer sur l'objet world_areas comme ça

{% for area in world_areas %}

produit une erreur de syntaxe de modèle

L'objet 'RelatedManager' n'est pas itérable

Quelqu'un a-t-il une idée de pourquoi cela se produit? ne peux vraiment pas sembler contourner cela! strangley cela fonctionne pour moi dans Shell: S ai-je raté quelque chose d'évident ???

Un grand merci à tous ceux qui peuvent aider!

49
Mike Waites

Appelall() pour récupérer les éléments du gestionnaire.

{% for area in world_areas.all %}
134
laffuste

En général, il est préférable d'utiliser un values ou values_list pour passer des données d'un ensemble de requêtes à un modèle.

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

Consultez les Django docs pour savoir comment utiliser la fonction values si vous ne l'avez pas utilisée auparavant.

10
Craig Blaszczyk

Je rencontre ce problème par une erreur imprudente:

 for physicalserver in task.physicalservers:
        physicalserver.relieve_task()

L'objet task.physicalservers Est RelatedManager, dans mon cas, je devrais obtenir les serveurs physiques de la tâche, il devrait ajouter .all().

for physicalserver in task.physicalservers.all():
4
aircraft