Fabian Calderon Marin
Fabian Calderon Marin

Reputation: 21

Django 'model' object is not iterable error

I have a problem that I would like you to help me.

I have a list of users that shows fine, but when I try to edit a user I get the error: Django 'Residente' object is not iterable. This is my code:

residente_list.html

<div class="card-body">
    {% if not obj %}
        <div class="alert alert-info">No hay Residentes</div>
    {% else %}
    <table class="table table-striped table-hover">
        <thead>
        <th>Nombres</th>
        <th>Genero</th>
        <th>T.Documento</th>
        <th>N.Documento</th>
        <th>Residencia</th>
        <th>Estado</th>
        <th class="all">Acciones</th>
        </thead>
        <tbody>
            {% for item in obj %}
                <tr>
                    <td>{{ item.nombre_completo }}</td>
                    <td>{{ item.genero }}</td>
                    <td>{{ item.t_doc }}</td>
                    <td>{{ item.numero_doc }}</td>
                    <td>{{ item.residencia }}</td>
                    <td>{{ item.estado|yesno:"Activo, Inactivo" }}</td>
                    <td>
                        <a href="{% url 'res:residentes_edit' item.id %}" class="btn btn-warning btn-circle" role="button"><i class="far fa-edit"></i></a>
                        <a href="#" class="btn btn-danger btn-circle" role="button"><i class="far fa-trash-alt"></i></a>
                    </td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
    {% endif %}
</div>

views.py

class ResidenteEdit(LoginRequiredMixin, generic.UpdateView):
model = Residente
template_name = "res/residente_form.html"
context_object_name = "obj"
form_class = ResidenteForm
success_url = reverse_lazy("res:residentes_list")
login_url = 'bases:login'
success_message = "Residente Editado Satisfactoriamente"

urls.py

path('residentes/edit/<int:pk>', ResidenteEdit.as_view(), name='residentes_edit'),

models.py

class Residente(models.Model):
nombre_completo = models.CharField(
    max_length=100,
    unique=True)

genero = models.ForeignKey(Genero, on_delete=models.CASCADE)
t_doc = models.ForeignKey(Tdocs, on_delete=models.CASCADE)
numero_doc = models.CharField(max_length=100)
residencia = models.ForeignKey(Predio, on_delete=models.CASCADE)
estado = models.BooleanField(default=True)

Thanks for help

Upvotes: 2

Views: 857

Answers (1)

Diego Leal
Diego Leal

Reputation: 126

When you are in a list view you are usually dealing with a lot of objects (in your case, a lot of Residente's), but when you are editing them you only have one, therefore, you dont need the

{% for item in obj %}

You can do just

obj.nombre_completo
obj.genero
#...
#etc

This should be done in your residente_form.html file.

I have the suspicion you are trying to run a loop in your residente_form.html. If you still can't solve your problem, try posting your residente_form.html here.

Upvotes: 1

Related Questions