web-dev-qa-db-de.com

Das 'RelatedManager'-Objekt kann nicht iteriert werden Django

Hey, ich habe mich hier auf SO) in ähnlichen Beiträgen umgesehen, aber nichts gefunden, was mein Problem gelöst hätte. Ich habe die folgenden Modelle,

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

ich habe folgende Ansicht eingerichtet

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

versuchen, das world_areas-Objekt wie folgt zu durchlaufen

{% for area in world_areas %}

erzeugt einen Template-Syntaxfehler

Das Objekt 'RelatedManager' kann nicht iteriert werden

Hat jemand eine Idee, warum das so ist? kann das nicht wirklich umgehen! Strangley, das funktioniert bei mir in Shell: S Vermisse ich etwas Offensichtliches ???

Vielen Dank an alle, die helfen können!

49
Mike Waites

Aufrufall(), um die Elemente aus dem Manager abzurufen.

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

Im Allgemeinen ist es besser, ein values oder values_list Zu verwenden, um Daten von einem Abfragesatz an eine Vorlage zu übergeben.

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

In den Django docs finden Sie Informationen zur Verwendung der values -Funktion, falls Sie diese noch nicht verwendet haben.

10
Craig Blaszczyk

Ich bin aus einem leichtsinnigen Fehler auf dieses Problem gestoßen:

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

Das task.physicalservers Ist das Objekt RelatedManager. In meinem Fall sollte ich die physischen Server der Aufgabe abrufen und .all() hinzufügen.

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