【问题标题】:How to create models dropdown menu in django如何在 django 中创建模型下拉菜单
【发布时间】:2021-10-01 21:28:21
【问题描述】:

我创建了两个模型名称类别和子类别,如果我创建一个类别名称商品,那么我可以在其下创建子类别名称 t shirt、hoddies、shirt 所以我将类别与子类别中的外键链接起来,所以我想渲染一个下拉菜单,其中将显示顶部类别以及与类别相关的所有子类别,但我无法实现,我尝试了这个

我的模型.py

class Categories(models.Model):
    name = models.CharField(max_length=100, blank=False)
    joined_date = models.DateTimeField(default=timezone.now,editable=False)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class Subcategories(models.Model):
    categories = models.ForeignKey(Categories, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, blank=False)
    joined_date = models.DateTimeField(default=timezone.now,editable=False)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

还有我的观点.py

class home(View):
    def get(self, request,):
        category_list = Categories.objects.all()
        return render (request, 'home.html', {'category_list': category_list }) 

还有我的html

<ul class="navbar-nav m-auto">
              {% for category in category_list  %}
              <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle category" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
                  {{ category.name }}
                </a>
                <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
                  <li><a class="dropdown-item text-white" href="#"></a></li>
                </ul>
              </li>
              {% endfor %}

我的 urls.py

path('',home.as_view(),name='home' ),

它的作用是加载类别名称但无法在下拉菜单下子类别名称

这里有图片让你更好地理解

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-templates


    【解决方案1】:

    尝试在类别foreignKey中设置related_name = our_categories 然后在html文件集中:

    <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
          {% for item in category.our_categories.all %} 
                <li><a class="dropdown-item text-white" href="#"></a> {item.name} </li>
          {% endfor %}
    </ul>
    

    【讨论】:

    • 它成功了,谢谢兄弟,请你总结一下,它会很棒
    • 是的,related_name 是什么意思?它是两个模型之间反向关系的名称。在第一个循环{% for category in category_list %} 我们获取数据库中的所有Categories,然后在第二个循环中我们使用relate_name 给我们所有属于这个CategorySubcategoriesThis will help you to understand it better
    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 2016-06-29
    • 1970-01-01
    • 2015-11-01
    • 2012-11-08
    • 2022-10-20
    • 2020-03-19
    • 2016-12-11
    相关资源
    最近更新 更多