2

我有两个课程位置和供应商。供应商向一个或多个城市供应其产品。

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 命令列出了来自城市 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 %}
4

1 回答 1

2

您想使用跨越关系的查找

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 表单url 调度程序将参数传递给您的视图。

url(r'^/sellers/(?P<city>\w+)/$', my_view, name='sellers')

def my_view(request, city):
    # rest of your view
于 2012-12-13T10:57:56.250 回答