2

場所とサプライヤーの2つのクラスがあります。サプライヤは、製品を1つ以上の都市に供給します。

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)

上記のシェルコマンドは、都市1(int)のすべてのサプライヤーを一覧表示します。しかし、Webページから都市名を取得し、それに基づいてフィルタリングする必要がありますか?

意見:

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 に答える