Django SQL 遍历菜单及子菜单

2024-06-02 11:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

视图.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)

模板.html

^{pr2}$

显然,当我运行这个程序时,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")
...

Tags: name邻里citydbmodelmodelshtmlargs
1条回答
网友
1楼 · 发布于 2024-06-02 11:23:31

如果我没有正确理解这种关系,一个城市有很多街区。所以这是一种多对多的关系。在模型.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链接可转到仅包含其社区的城市视图,如下所示:

^{pr2}$

链接到您的网址.py公司名称:

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

那么你的观点视图.py城市中的社区可能只会像这样过滤:

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

那就只打电话给那个城市的社区模板.html公司名称:

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

希望能显示数据库调用,视图.py进程,以及它如何根据中的请求路由视图网址.py. 如果你还需要什么,lmk。在

相关问题 更多 >