我有两个班级位置和供应商。供应商向一个或多个城市供应产品。
class Location(models.Model):
cities = models.CharField(max_length=30)
class Supplier(models.Model):
name = models.CharField(max_length=100)
supplied_cities = models.ManyToManyField(Location)
现在,我必须从城市列表中获取城市的所有供应商。 例如:如果点击伦敦,我应该得到所有与伦敦相关的供应商。我该怎么做?
Supplier.objects.filter(supplied_cities= 1)
上面的shell命令列出了来自city 1(int)的所有供应商。但是我必须从网页上捕获城市名称并根据它进行过滤?
查看:
def my_view(request):
cityName = request.GET['place']
sellers = Supplier.objects.filter(supplied_cities= Location.objects.get(cities=cityName))
context = {'sellers' : sellers }
return render_to_response('results.html',context,context_instance=RequestContext(request))
模板:
{% for sellers in object_list %}
<li> {{ sellers.name }} </li>
{% endfor %}
答案 0 :(得分:2)
您想使用lookups that span relationships:
def my_view(request):
city_name = request.GET.get('place')
sellers = Supplier.objects.filter(supplied_cities__cities=city_name)
context = {'sellers' : sellers }
return render_to_response('results.html', context, context_instance=RequestContext(request))
然后是你的模板:
{% for seller in sellers %}
<li> {{ seller.name }} </li>
{% endfor %}
你错误地命名了你的上下文变量。
我强烈建议您使用django forms或url dispatcher将参数传递给您的观点。
url(r'^/sellers/(?P<city>\w+)/$', my_view, name='sellers')
def my_view(request, city):
# rest of your view