【问题标题】:Django SQL Loop Through Menu & Sub-menuDjango SQL 循环菜单和子菜单
【发布时间】:2014-04-20 12:40:15
【问题描述】:

尝试创建一个包含“城市/位置”的菜单,其中包含“社区”的子菜单

  • 纽约
  • -- 邻里
  • -- 邻里
  • -- 邻里
  • 芝加哥
  • -- 邻里
  • -- 邻里
  • -- 邻里
  • 迈阿密
  • -- 邻里
  • -- 邻里
  • -- 邻里

View.py

def location(request):
args['getlocs'] = Location.objects.filter(switch=1, restaurants__city_id=8).order_by('name')
args['gethoods'] = Hood.objects.filter(switch=1, restaurants__city_id=8).distinct().order_by('name')
return render_to_response('location.html', args)

Template.html

<ul>
   {% for location in getlocs %}
      <li>{{ location.name }}</li>
        <ul>
           {% for hood in gethoods %}
              <li>{{ hood.name }}</li>
           {% endfor %}
        </ul>
    {% endfor %}
</ul>

显然,当我运行此程序时,会显示 db 中的每个社区,我只需要显示属于每个城市/位置的社区。有没有办法只是向 html 模板添加一些条件,还是我需要更改视图?非常感谢!

编辑:

class Location(models.Model):
name = models.CharField(max_length=50, db_column='location', blank=False, null=False)
city = models.ForeignKey('City', related_name="locations")
...

class Hood(models.Model):
name = models.CharField(max_length=50, db_column='hood')
city = models.ForeignKey('City', related_name='hoods')
location = models.ForeignKey('Location', related_name='hoods')
... 

class Restaurant(models.Model):
name = models.CharField(max_length=50, db_column='name', blank=True)
location = models.ForeignKey('Location', related_name="restaurants")
hood = models.ForeignKey('Hood', null=True, blank=True, related_name="restaurants")
...

【问题讨论】:

  • LocationHood 模型是如何关联的?你能展示一下模型吗?谢谢。
  • 感谢您的回复。贴出上面的模型。还有一个带有 CITY 的模型,因此是视图中的引用,但该模型始终被引用,并且不是菜单/子菜单的一部分。

标签: python sql django django-models django-templates


【解决方案1】:

如果我理解正确的关系,一个城市有很多社区。所以这是一个多对多的关系。在 models.py 中,这看起来像

from django.db import models

class Neighborhood(models.Model):
  name = models.CharField(max_length=100)

class City(models.Model):
  name = models.CharField(max_length=100)
  neighborhoods = models.ManyToManyField(Neighborhood)

然后,您可以将您的页面设置为接受城市名称作为 href 中的参数,然后仅调用该城市中社区的页面视图。您在模板中的 href 链接转到仅包含其社区的城市视图可能如下所示:

<a href="{% url 'city_view' city.name %}">Link</a>

在你的 urls.py 中链接到这个 url:

url(r'city/(?P<city_name>.+)/$', views.city_view, name='city_view')

那么您在views.py 中将只过滤该城市的社区的视图可能如下所示:

def city_view(request, name):
  city = City.objects.get(name=name)
  neighborhoods = city.neighborhoods.all()
  return render(request, 'template.html', {'neighborhoods': neighborhoods})

然后在 template.html 中只调用该城市的街区:

{% for neighborhood in neighborhoods %}
  neighborhood.name
{% endfor %}

这应该有望显示数据库调用、views.py 进程,以及它如何根据 urls.py 中的请求路由视图。如果你还需要什么,lmk。

【讨论】:

  • 非常感谢您的反馈!我会试一试,然后报告。再次感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多