How to display object name in Django template?

Asked

Viewed 196 times

0

Hello!

I’m in a learning process of Django, in fact, I started a little while ago and I’m finding it difficult to find a way to display the name of the publisher that is a Foreignkey. Follow the codes below:

My models.py

    titulo_livro = models.CharField(
        max_length = 45
        )
    subtitulo_livro = models.CharField(
        max_length = 45,
        null = True,
        blank = True
        )
sinopse_livro = models.TextField(
        max_length = 1000
        )
    avaliacao_livro = models.DecimalField(
        max_digits = 2,
        decimal_places = 2
        )
    isbn_livro = models.CharField(
        max_length = 13
    ) 
    publicacao_livro = models.DateField(
        auto_now = False,
        auto_now_add = False
        )
    editora_cod_editora = models.ForeignKey(
        'Editora',
        on_delete = models.CASCADE
        )
    categoria_cod_categoria = models.ForeignKey(
        'Categoria',
        on_delete = models.CASCADE
        )

    class Meta:
        db_table = 'Livros'

# CLASSE PARA A CRIAÇÃO DA TABELA DE EDITORAS    
class Editora(models.Model):
    nome_editora = models.CharField(
        max_length = 45
        )
    class Meta:
        db_table = 'editora'

My Forms.py

class LivrosFormulario(forms.ModelForm):
    class Meta:
        model = Livros
        fields = ['titulo_livro','subtitulo_livro','sinopse_livro','avaliacao_livro','isbn_livro','publicacao_livro','editora_cod_editora','categoria_cod_categoria',]

A view.py I’m struggling to understand

def livro(request):
    if request.method == 'POST':
        form = LivrosFormulario(request.POST or None)
        e = Editora.objects.values('nome_editora')
        print(form.errors)
        if form.is_valid():
            print("form é válido")
            try:
                form.save()
                print("form salvo")
                return redirect('/mostrar')
            except:
                print("form não salvo")
                pass
        else:
            print("form não é válido")
    else:
        form = LivrosFormulario()
    return render(request, 'index.html', {'form':form})

And the Template index.html that should display the publisher name, but only the id appears

<form method="POST" class="post-form" action="/livro">

      {% csrf_token %}

      <!-- forms que estão funcionando não vou colar aqui-->

        <div class="form-group row">
          <label class="col-sm-2 col-form-label">Editora do Livro:</label>
          <div class="col-sm-4">
              {{ form.editora_cod_editora }}
          </div>
        </div>

        <div class="form-group row">
          <label class="col-sm-2 col-form-label">Categoria do Livro:</label>
          <div class="col-sm-4">
            {{ form.categoria_cod_categoria }}
          </div>
        </div>

        <div class="form-group row">
          <label class="col-sm-1 col-form-label"></label>
          <div class="col-sm-4">
            <button type="submit" class="btn btn-primary">Submit</button>
          </div>
        </div>

      </div>
    </form>

Edit: My page looks like this:

imagem mostrando o id da editora ao invés de mostrar o nome

Could you give me some light? I’ve been banging my head on this for a long time kkkkk

For information: I am using the latest stable version of Django and Python

Grateful!

2 answers

2


Make a def str(self): within the publisher model class then return the self.publisher the models will look something like this:

class Editora(models.Model):
    nome_editora = models.CharField(
        max_length = 45
        )
    class Meta:
        db_table = 'editora'
    def __str__(self):
        return self.nome_editora

0

Add to the class Editora the method__str__(), something like that:

class Editora(models.Model):
    ...
    def __str__(self):
        return self.nome_editora

This will make the Django learn how to correctly represent this object.

Browser other questions tagged

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