Viene visualizzato il seguente errore quando si tenta di eseguire il loop su una variabile nei miei modelli Django. La variabile in questione è il relativo oggetto del modello specificato nel mio detailview sottoclasse:TypeError object is not iter
TypeError a/it/candidati/50.771.459,778 mila/
oggetto 'Householdmember' non è iterabile
Qui è il mio models.py
di file:
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)
Ecco il mio file urls.py
:
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'),
Ecco la parte rilevante del mio modello, 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 parte che viene commentata (vale a dire la parte tra i tag <!-- -->
) funziona, il che mi porta a pensare che dovrei essere in grado di scorrere la variabile householdmember
. Ma quando provo a farlo, non funziona - ho appena ricevuto l'errore TypeError sopra.
Ho cercato uno stackoverflow.com in modo efficiente per una risposta, ma la risposta più vicina che ho trovato è questa: django how to loop through the context object passed back by a generic detailview?, ma non risolve il mio problema, penso perché sto usando le viste basate sulla classe.
Apprezzerebbe molto qualsiasi aiuto. Grazie!
Ciao Lalo, grazie per la tua rapida risposta. Una domanda: qual è 'Progetto' in' campo in Project._meta.fields' nel tuo codice qui sopra? –
Mi dispiace, deve essere Householdmember – lalo