在Django模板中获取相关字段

时间:2018-10-14 16:20:05

标签: django

我有两个模型:

class Button(models.Model):
    title = models.CharField(max_length=100,)
    anchor = models.ForeignKey(Section, on_delete=models.CASCADE, 
                   related_name='anchor', blank=True, null=True,)

class Section(models.Model):
    ...
    transliterate_name = models.CharField(max_length=100, blank=True, 
                                                           null=True)

现在我想在模板中获取transliterate_name。我将此字段用作文章的ID。我想将其分配给导航菜单中的按钮ID。 有我的模板:

<ul class="navbar-nav">
        {% for menu_btn in menu_buttons %}
            <li class="nav-item">
                <a href="#{{ ??? }}" class="nav-link">
                     {{ menu_btn.title }}
                </a>
            </li>
        {% endfor %}
    </ul>

在我看来:

class SectionView(ListView):
    queryset = Section.objects.filter(name_visible=True)
    context_object_name = 'sections'
    extra_context = {
        'articles': Article.objects.all(),
        'menu_buttons': Buttons.objects.all(),
    }

    template_name = 'sections/sections.html'

任何建议。

1 个答案:

答案 0 :(得分:1)

您可以通过获取Section属性来获取相关的anchor对象:

<a href="#{{ menu_btn.anchor.transliterate_name }}" class="nav-link">

由于您将获取每个 Button对象的相关属性,因此最好通过 one 获取来获取所有这些Section .select_related(..)

class SectionView(ListView):
    queryset = Section.objects.filter(name_visible=True)
    context_object_name = 'sections'
    extra_context = {
        'articles': Article.objects.all(),
        'menu_buttons': Buttons.objects.select_related('anchor').all(),
    }

    template_name = 'sections/sections.html'