尝试创建一个带有“城市/位置”的菜单,其中包含“社区”的子菜单
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>
显然,当我运行它时,显示数据库中的每个邻域,我只需要显示属于每个城市/位置的邻域。有没有办法只是为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")
...
答案 0 :(得分:0)
如果我正确地建立了这种关系,那么一个城市就有很多社区。所以这是一个多对多的关系。在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(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中的请求路由视图。如果您还需要其他任何东西,请登录。