タイトルをどうつけるべきか分からず、分かりづらいタイトルで申し訳ありません。
Django(Python)でWebサイトを作っています。
下記のように、都道府県と市町村のモデルを作って、データベースを作ったうえで、都道府県と市町村の一覧を表示したいです。
python
1# models.py 2 3# 都道府県(東京都、神奈川県、…) 4clsss Prefecture(models.Model): 5 id = models.IntegerField(primary_key=True) 6 name = models.CharField(max_length=30) 7 8 def __str__(self): 9 return self.name 10 11# 市区町村(千代田区、港区、…) 12class City(models.Model): 13 name = models.CharField(max_length=30) 14 prefecture = models.ForeignKey(Prefecture, on_delete=models.CASCADE) 15 def __str__(self): 16 return self.name 17
最終的に表示したいのは、下記のような形です。
|都道府県|市区町村|
|:--|:--:|--:|
|東京都|千代田区、港区、世田谷区、…|
|神奈川県|横浜市、川崎市、…|
この場合の、views.py及びHTMLの書き方について、今まで私は下記のようにしていました。
python
1# views.py 2 3def test(request): 4 list = [] # 表示用の空のリストを作る 5 prefectures = Prefecture.objects.all() # 都道府県 6 cities = City.objects.all() # 市区町村 7 for pref in prefectures: 8 list_each_pref = [pref] # 例:["東京都"] 9 city_list_each_pref = [] # 都道府県毎の市区町村を入れる空のリスト 10 for city in cities: 11 if city.prefecture == pref: # もし当該市区町村が当該都道府県内であったら 12 city_list_each_pref.append(city) # 都道府県毎の市区町村を入れるリストに入れる ["千代田区"、"港区"] 13 list_each_pref.append(city_list_each_pref) # 例["東京都",["千代田区","港区",...]] 14 list.append(list_each_pref) #例[["東京都",["千代田区","港区",...]],["神奈川県",["横浜市","川崎市",...]]] 15 16context = { 17 "list": list 18} 19return render(request, 'test/test.html', context) 20
そして、レンダリングするHTMLは、下記のように書いていました。
html
1# test.html 2<table> 3<tr> 4 <th>都道府県</th><td>市区町村</td> 5<tr> 6{% for pref in list %} 7 <tr> 8 <td>{{pref.0}}</td> 9 <td> 10 {% for city in pref.1 %} 11 {{city}}, 12 {% endfor %} 13 </td> 14</tr> 15{% endfor %} 16
私は、今まで自己流でこのように書いていたのですが、表示用のリストを作るというのが複雑で、一般的にはこんな方法は取らないのではないかと思います。
もっとシンプルなやり方があるのではないかと思い、質問させていただきました。
お分かりの方、ご教示頂ければ幸いです。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/03/22 10:00