TypeError objet n'est pas itérable
J'obtiens l'erreur suivante en essayant de boucle sur une variable dans mes modèles Django. La variable en question est l'objet du modèle spécifié dans ma fenêtre detravail sous-classe:
TypeError au /fr/candidats/50771459778/
'Householdmember' objet n'est pas itératif
Voici mon models.py
fichier:
class Applicant(models.Model):
user = models.ForeignKey(User, editable=False)
bank_card_number = models.CharField(_('Bank card number'),max_length=50, unique=True)
site_of_interview = models.IntegerField(_('Site of interview'), choices = SITE_CHOICES, default=TIRANA, blank=False)
housenumber = models.CharField(_('House Number'),max_length=8)
address_line1 = models.CharField(_('Address line 1'),max_length=50)
address_line2 = models.CharField(_('Apt #'),max_length=50,blank=True)
municipality = models.CharField(_('Municipality/commune'),max_length=25)
district = models.CharField(_('District'),max_length=25,blank=True)
urban = models.IntegerField(_('Area (urban/rural)'), choices = AREA_CHOICES, blank=False)
postal = models.CharField(_('Postal code'),max_length=25,blank=True)
class Householdmember(models.Model):
applicant = models.ForeignKey(Applicant)
first_name = models.CharField(_('First name'),max_length=50,blank=False)
middle_name = models.CharField(_('Middle name'),max_length=50,blank=True)
last_name = models.CharField(_('Last name'),max_length=50,blank=False)
national_id = models.CharField(_('National ID'),max_length=50,blank=False, unique=True)
male = models.IntegerField(_('Gender'), choices = GENDER_CHOICES, blank=False)
date_of_birth = models.DateField()
rel_to_head = models.IntegerField(_('Gender'), choices = RELTOHEAD_CHOICES, blank=False)
disability = models.IntegerField(_('Is disabled?'), choices = YESNO_CHOICES, blank=False)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
Voici mon urls.py
fichier:
class ListViewApplicants(ListView):
paginate_by = 100
def get_queryset(self):
return Applicant.objects.all()
class DetailViewUnmask(DetailView):
def get_object(self):
return self.get_queryset().get(pk=mask_toggle(self.kwargs.get("pk_masked")))
urlpatterns = patterns('',
url(r'^$',
login_required(ListViewApplicants.as_view(
template_name='applicants/index.html',
#context_object_name='form',
)),
name='index'),
url(r'^(?P<pk_masked>\d+)/$',
login_required(DetailViewUnmask.as_view( model=Applicant,
template_name='applicants/detail.html'
)),
name='detail'),
Voici la partie de mon modèle, detail.html
:
<h2>Household members</h2>
<table class="package_detail">
<tr>
{% include "applicants/householdmember_heading_snippet.html" %}
</tr>
{% for householdmember in applicant.householdmember_set.all %}
<tr>
{% for field in householdmember %}
<td>{{ field }}</td>
{% endfor %}
<!--
<td>{{ householdmember.first_name }}</td>
<td>{{ householdmember.middle_name }}</td>
<td>{{ householdmember.last_name }}</td>
<td>{{ householdmember.national_id }}</td>
<td>{{ householdmember.get_male_display }}</td>
<td>{{ householdmember.date_of_birth }}</td>
<td>{{ householdmember.get_rel_to_head_display }}</td>
<td>{{ householdmember.get_disability_display }}</td>
-->
</tr>
{% endfor %}
</table>
La partie qui est en commentaire (c'est à dire la partie entre les <!-- -->
tags) des œuvres, ce qui m'amène à penser que je devrais être en mesure d'effectuer une itération sur les householdmember
variable. Mais quand j'essaie de le faire, elle ne fonctionne pas - je viens d'obtenir le TypeError ci-dessus.
J'ai cherché stackoverflow.com exentsively pour une réponse, mais la réponse la plus près que j'ai pu trouver est celui-ci: django comment faire une boucle dans le contexte de l'objet passé en arrière par un générique fenêtrede travail?, mais cela ne résout pas mon problème, je pense que parce que je suis l'aide de la classe des vues basées sur les.
Apprécierais toute aide. Merci!
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas iter sur une instance du modèle.
Je vous recommande d'utiliser votre code commenté.
Si vous souhaitez utiliser un forloop, peut-être que vous pouvez ajouter ce code:
Mais, on ne recommandons
Qui est mieux:
Project
dansfor field in Project._meta.fields
dans votre code ci-dessus?J'ai réussi à résoudre ce; voici comment. J'ai utilisé les infos ici: Itération sur le modèle de l'exemple des noms de champ et les valeurs du modèle
Voici ce que j'ai ajouté à mon
models.py
fichier:Et voici ce que ma
detail.html
le fichier se termine par ressembler à:Ce qui donne le résultat souhaité.