如何获得“类别”列的列表,然后在单个视图中列出所有内容?

时间:2018-12-19 03:25:18

标签: django

我想在页面顶部放置一个导航栏,其中包含模型中的类别。 而且,当我单击某个类别的链接时,我想要一个表格,其中列出了该类别中的项目。

无论出于什么原因,我都无法同时使两者同时工作。

这是我的模特

from django.db import models

# Create your models here.
class menulist(models.Model):
    name = models.CharField(max_length=120)
    description = models.CharField(max_length=500)
    price = models.DecimalField(decimal_places=1, max_digits=10, default=100.00)
    category_choices = (
        ('breads', 'Breads'),
        ('cakes', 'Cakes'),
        ('hotfood', 'Hot Food'),
        ('porkrolls', 'Pork Rolls'),
        ('drinks', 'Drinks'),
        ('MISC', 'Misc'),
    )
    category = models.CharField(max_length=50, choices=category_choices, default='MISC',)
    dateadded = models.DateField(auto_now_add=True)
    dateupdated = models.DateField(auto_now=True)
    img = models.ImageField(upload_to='products/', default='products/blank.jpg')

    def __str__(self):
        return self.name

这是视图:

class ProductAdminView(ListView):
    template_name = 'menulistapp/product_admin.html'

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(ProductAdminView, self).get_context_data(**kwargs)
        categorylist = menulist._meta.get_field('category').choices
        context = {
            "category_list": categorylist,
        }
        return context

    def get_queryset(self):
        slug = self.kwargs.get("slug")
        if slug:
            queryset = menulist.objects.filter(category__iexact=slug)
        else:
            queryset = menulist.objects.all()
        return queryset

html模板:

    {% extends 'base.html' %}

    {% block content %}
    <div class="container ">

        <ul class="nav nav-pills border-bottom border-top pt-2 pb-2">
            {% for a, b in category_list %}
            <li class="nav-item">
                <a class="nav-link" href="/productadmin/{{ a }}">{{ b }}</a>
            </li>
            {% endfor %}
        </ul>

</div>


    <!-- tables -->

      <div class="container">
          <div class="row">

              <table class="table table-striped table-hover ">
                  <thead class="thead-dark">
                    <tr>
                        <th style="width: 15%"scope="col"></th>
                        <th style="width: 55%" scope="col">Product Name</th>
                        <th scope="col">Category</th>
                        <th scope="col">Price</th>
                        <th scope="col">Date Added</th>
                        <th scope="col">Last Updated</th>

                    </tr>
                  </thead>
                  <tbody>
                    {% for obj in object_list %}

                    <tr>
                        <td class="align-middle"><img src="{{ obj.img.url }}" class="img-fluid"></td>
                        <td class="align-middle">{{ obj }}</td>
                        <td class="align-middle">{{ obj.category }}</td>
                        <td class="align-middle">${{ obj.price }}</td>
                        <td class="align-middle">{{ obj.dateadded }}</td>
                        <td class="align-middle">{{ obj.dateupdated }}</td>

                    </tr>

                    {% endfor %}

                  </tbody>
                </table>

          </div>
      </div>
    {% endblock %}

有时,只有注释掉导航栏,我才能使列表生效,反之亦然。

我看过mixins,但这只会让我更加困惑,什么也没做。

0 个答案:

没有答案