【问题标题】:Django menu Tree foreachDjango 菜单树 foreach
【发布时间】:2020-07-28 15:58:44
【问题描述】:

这是我在 Django 中的模型:

from django.db import models
# Create your models here.
statusChoice = ((1, 'Show'), (2, 'Hide'))

class newCatagory(models.Model):
    cat_name = models.CharField(max_length = 255)
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank = True)
    created_at = models.DateTimeField(auto_now_add=True)
    status = models.SmallIntegerField(choices = statusChoice, null=True)

    def __str__(self):
        return "%s, --%s" % (self.parent, self.cat_name)

class products(models.Model):
    pro_name = models.CharField(max_length = 255, null =True)
    sub_cat_id = models.ForeignKey(newCatagory, on_delete=models.CASCADE, null=True, blank = True)
    pro_image = models.ImageField(null = True)
    pro_price = models.FloatField(null = True)
    description = models.TextField(null = True)
    status = models.SmallIntegerField(choices = statusChoice, null=True)
    created_at = models.DateTimeField(auto_now_add=False, null=True)

    def __str__(self):
        return self.pro_name

我正在创建像上面这样的模型。但我不知道如何向我的观点展示我的类别。我该怎么做呢

这是我的模板 html:

<li><a href="#">{{This is catagory}}</a>
    <ul class="sub-menu">
        <li><a href="#">{{this is subcatagory}}</a></li>
    </ul>
</li>

我正在尝试使用for循环但不知道如何使用,请帮助

【问题讨论】:

标签: django model menu


【解决方案1】:

这是一种方法:

statusChoice = ((1, 'Show'), (2, 'Hide'))

class newCatagory(models.Model):
    cat_name = models.CharField(max_length = 255)
    parent = models.ForeignKey('self', related_name='subcats', on_delete=models.CASCADE, null=True, blank = True)
    created_at = models.DateTimeField(auto_now_add=True)
    status = models.SmallIntegerField(choices = statusChoice, null=True)

    def __str__(self):
        return "%s, --%s" % (self.parent, self.cat_name)

然后在模板中:

{% for cat in categories %}
    {% if not cat.parent %}
        <li><a href="#">{{ cat }}</a>
            {% if cat.subcats.count %}
                <ul>
                {% for subcat in cat.subcats.all %}
                    <li> <a> {% subcat %} </a> </li>
                    {# if you already seted a `related_name` for product foreign_key to categuries then it will looklike this #}
                    {% if subcat.products.count %}
                        <ul>
                        {% for product in subcat.products.all %}
                            <li> <a href="{{ product.get_absolut_url }}"> {{ product.name }} </a> </li>
                        {% enfor %}
                        </ul>
                    {% endif %}
                {% enfor %}
                </ul>
             {% endif %}
        </li>
    {% endif %}
{% enfor %}

但是如果你想深入子分类,也许最好创建一个父类,然后创建一个或多个子类来继承该父类,

class Products -> class DigitalProducts(Products) -> class MobilePhones(DigitalProducts) -> ...

【讨论】:

  • 是的,但您只能对此处的一级类别子树执行此操作
  • 视情况而定,我只是将它用于一个级别,如果您有更多,那么您可以为类别模型使用子类并利用 ‍‍‍‍‍继承
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多