【问题标题】:How can i get the name of the Foreign Key on Django List View with qyery returns None如何在 Django 列表视图中获取外键的名称,查询返回无
【发布时间】:2021-01-01 12:03:48
【问题描述】:

我想在页面上显示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.

view.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

models.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 %}

【问题讨论】:

    标签: python django django-templates django-generic-views


    【解决方案1】:
    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>
    

    【讨论】:

    • 我已经尝试了这些更改,很遗憾,不要为我渲染...
    • 应该渲染
    • 你从 self.kwargs['categoria'] 得到什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2013-06-13
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多