【问题标题】:Unable to Fetch particular product for each category无法获取每个类别的特定产品
【发布时间】:2020-08-20 11:31:41
【问题描述】:

我总是得到所有类别的所有食品。 我想显示每个 Category 和每个 food 项目。 需要显示具有属于该类别的项目的类别。 请有人帮我解决这个问题。我已经尝试在互联网上查找,但找不到解决方案

models.py

class Category(models.Model):
       category_name = models.CharField(max_length=50)
 
       def __str__(self):
        return self.category_name


class Menu(models.Model):

    dish_name = models.CharField(max_length=200, verbose_name='Name of Dish')
    Desc = models.TextField(verbose_name='Dish Description')
    Amount = models.IntegerField(null=False, blank=False, verbose_name='Amount of Dish')
    date_posted = models.DateTimeField(default=timezone.now, verbose_name='Dish Date Posted')
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=1)

    def __str__(self):
        return self.dish_name

views.py

def menu(request):

    products = Menu.objects.all()

    categories = Category.objects.all()

    data = {}
    data['products'] = products
    data['categories'] = categories
    template = 'food/menu.html'
    return render(request, template, data)

html

{% for category in categories %}

    {% if categories %}

        <div class="col-xs-12 col-sm-6">
          <div class="menu-section">
            <h2 class="menu-section-title">{{ category.category_name }}</h2>
            <hr>
            {% endif %}

              {% for i in products %}
              <div class="menu-item">
                <div class="menu-item-name">{{ i.dish_name}}</div>
                <div class="menu-item-price">Rs {{ i.Amount}}</div>
                <div class="menu-item-description">{{ i.Desc}}</div>
              </div>
              {% endfor %}
          </div>
        </div>
{% endfor %}

【问题讨论】:

    标签: python-3.x django django-models django-templates


    【解决方案1】:

    您没有根据类别过滤产品。

    我建议用数据做这样的事情:

    data = {
        'categories': {
            category: Menu.objects.filter(category=category) for category in categories
            }
        }
    

    在 html 中你可以:

    {% for category, products in categories.items %}
        {% if products %}
    
        <div class="col-xs-12 col-sm-6">
          <div class="menu-section">
            <h2 class="menu-section-title">{{ category.category_name }}</h2>
            <hr>
    
              {% for i in products %}
              <div class="menu-item">
                <div class="menu-item-name">{{ i.dish_name}}</div>
                <div class="menu-item-price">Rs {{ i.Amount}}</div>
                <div class="menu-item-description">{{ i.Desc}}</div>
              </div>
              {% endfor %}
    
          </div>
        </div>
    
        {% endif %}
    {% endfor %}
    

    【讨论】:

    • 我试过但最终得到错误'Need 2 values to unpack in for loop;得到 1' 你能帮我解决吗?
    • 嗨,很抱歉回复晚了:在第一行尝试`{% for category, products in categories.items %}` 或`{% for category, products in categories.items() %}`
    • 嗨,感谢您的大力帮助..它现在正在使用 (.items) 。你能用这个编辑你的主要答案,以便我可以将其标记为答案..
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多