首页 > 解决方案 > 如何使用 qyery 返回无在 Django 列表视图上获取外键的名称

问题描述

我想在页面上显示名称categoria

当至少有一个系列时,我可以得到名字。否则,它只会返回任何内容!我正在尝试创建一个新的上下文变量来传递类别名称。但我觉得我做错了什么......而且也很复杂......

categoria即使没有返回系列,有人可以帮我将名称传递给模板吗?

谢谢...

显示错误

DoesNotExist at /categoria/15
Categoria matching query does not exist.
Request Method: GET
Request URL:    http://localhost:8000/categoria/15
Django Version: 3.1
Exception Type: DoesNotExist
Exception Value:    
Categoria matching query does not exist.

视图.py

class CatergoriasSeriesView(ListView):
    model = Serie
    template_name = 'categorias_series_of.html'
    paginate_by = 10

    def get_queryset(self):
        return Serie.objects.filter(categoria=self.kwargs['categoria'])
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['cat'] = self.kwargs['categoria']
        context['cat_name'] = Categoria.objects.get(categoria=self.kwargs['categoria'])
        return context

模型.py

class Categoria(models.Model):
    categoria = models.CharField(
        max_length=200, verbose_name="Nome da categoria", help_text="colocar aqui o texto de ajuda")

    class Meta:
        verbose_name_plural = "Categorias"
        verbose_name = "categoria"

    def get_absolute_url(self):
        return reverse('series_da_categoria', kwargs={'pk': self.pk})

class Serie(models.Model):
    serie = models.CharField(
        max_length=200, verbose_name="Série", help_text="colocar aqui o texto de ajuda")
    categoria = models.ForeignKey(
        Categoria, default=1, on_delete=models.SET_DEFAULT)

HTML 模板

{% if object_list %}
  {% for serie in object_list %}
    <div>
      {% if forloop.first %}
      <h1 class="main-header">Categoria: {{ serie.categoria }}</h1>
      (...)
        {% if object_list|length == 0 %}
            Não foi encontrada nenhuma série
        {% elif  object_list|length == 1 %}
            Foi encontrada <span class="destaque">apenas uma</span> série
        {% else %}
        We have found <span class="destaque">{{ object_list|length }} séries</span>
        {% endif %} in category <span class="destaque">{{ serie.categoria }}</span>. </h5>
      {% endif %}
    </div>
  {% endfor %}
{% else %}
  <div>
    <h1 class="main-header">Categoria: {{ cat_name }}</h1>
    (...)
    <h5>No series Yet</h5>
  </div>
{% endif %}

标签: pythondjangodjango-templatesdjango-generic-views

解决方案


def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['cat'] = self.kwargs['categoria']
    context['cat_name'] = Categoria.objects.filter(categoria=self.kwargs['categoria'])
    return context

模板

    <h1 class="main-header">Categoria: {% for name in cat_name %} {{ name }} {% endfor %}</h1>

推荐阅读