I’m having trouble showing my Manytomany field models on the Django template

Asked

Viewed 105 times

0

I wonder how I can show my Manytomany field on my table, follow the code below.

My Model:

class Instrutor(models.Model):
    id = models.AutoField(primary_key=True)
    registro_instrutor = models.IntegerField(verbose_name=u'Registro Instrutor')
    nome_instrutor = models.CharField(max_length=50, verbose_name=u'Nome Instrutor')
    treinamento_habilitado = models.ManyToManyField(Treinamento, blank=True, verbose_name=u'Treinamento Habilitado')
    foto_instrutor = models.ImageField(upload_to='Photos_Instrutor', null=True, blank=True, verbose_name=u'Foto do Instrutor')

    def __str__(self):
        return self.nome_instrutor

My Views:

 @login_required
    def instrutor_list(request):
         nome_instrutor = request.GET.get('nome_instrutor', None)
         registro_instrutor = request.GET.get('registro_instrutor', None)


         if nome_instrutor:
            instrutor = Instrutor.objects.all()
            instrutor = instrutor.filter(nome_instrutor__icontains=nome_instrutor)

         elif registro_instrutor:
            instrutor = Instrutor.objects.all()
            instrutor = instrutor.filter(
                registro_instrutor__icontains=registro_instrutor)

         elif nome_instrutor and registro_instrutor:
           instrutor = Instrutor.objects.filter(nome_instrutor__icontains=nome_instrutor) | Instrutor.objects.filter(
               registro_instrutor__icontains=registro_instrutor)

         else:
            instrutor = Instrutor.objects.all()

         return render(
            request, 'instrutor.html', {"instrutor": instrutor})

# Meu Template:
  <div class="tabela-conteudo-instrutor">
<table class="table table-sm">
        <thead class="thead-dark">
            <tr>
                <th scope="col0">Registro do Instrutor</th>
                <th scope="col1">Nome do Instrutor</th>    
              <th scope="col2">Treinamento Habilitado</th>
              <th scope="col3">Foto do Instrutor</th>
            </tr>
        </thead>
            <th scope="row">{% for instrutor in instrutor %}
                {% endfor %}
                </th>
        <td>
            {% for instrutor in instrutor %}
        </td>
        <tbody>
            <td>
                <a href="{% url 'instrutor_update' instrutor.id %}"> {{instrutor.registro_instrutor}}</a>
                <a href="{% url 'instrutor_delete' instrutor.id %}" class="trash-item">
                    <i class=" fa fa-trash" aria-hidden="true"></i>
            </td>
            <td>
                    <a href="{% url 'instrutor_update' instrutor.id %}"> {{instrutor.nome_instrutor}}</a>
                    <a href="{% url 'instrutor_delete' instrutor.id %}" class="trash-item">
                        <i class=" fa fa-trash" aria-hidden="true"></i>
                </td>
                <td>
                        <a href="{% url 'instrutor_update' instrutor.id %}"> {{instrutor.treinamento_habilitado}}</a>
                        <a href="{% url 'instrutor_delete' instrutor.id %}" class="trash-item">
                            <i class=" fa fa-trash" aria-hidden="true"></i>
                    </td>
                    <td>
                            <a href="{% url 'instrutor_update' instrutor.id %}"> {{instrutor.foto_instrutor}}</a>
                            <a href="{% url 'instrutor_delete' instrutor.id %}" class="trash-item">
                                <i class=" fa fa-trash" aria-hidden="true"></i>
                        </td>
            {% endfor %}
        </tbody>
    </table>
</div>

1 answer

0

Good,

the attribute treinamento_habilitado returns an Object that can return more than one hbility, so you have to do a for Check this object and get all values returned with the all.

Quick fix:

Change the line you want to indicate the skill:

<a href="{% url 'instrutor_update' instrutor.id %}"> {{instrutor.treinamento_habilitado}}</a>

To:

{% for treinamento_habilitado in instrutor.treinamento_habilitado.all %}
     <a href="{% url 'instrutor_update' instrutor.id %}"> {{treinamento_habilitado}}</a>
{% endfor %}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.