おそらくここで起こっているのは、 をareas_related
文字列として格納していることです。
したがって、おそらく次のようなモデルがあります。
class Service(models.Model):
...
areas_related = models.CharField(max_length=<length_here>)
そして、ビューでこれを行います:
def foo_view(request, ...):
...
service = <retrieve Service here>
areas_related = request.POST.getlist('areas_related')
service.areas_related = areas_related
service.save()
...
ここで何が起こっているかというとrequest.POST.getlist('areas_related')
、 Python のリストを返します。ただし、その値をモデルの文字列フィールドに格納します。その結果、Django は指定されたリストを文字列に変換しようとし、それをデータベースに保存します。Python リストを文字列に変換すると、結果はリストの文字列表現になります。
>>> a = [u'foo', u'foo2']
>>> unicode(a)
u"[u'foo', u'foo2']"
これを解決するには、次のいずれかを実行できます。
外部キー
areas_related
モデル内の単一のフィールドとしてすべてを保存する代わりに、それらを外部キーとして保存します。SQL集計を行うことができ、次の方法と比較してより柔軟であると考えられるため、これはより良い方法だと思います。
# models.py
class AreaRelated(models.Model):
service = models.ForeignKey('Service', related_name='areas_related')
areas_related = models.CharField(max_length=<length_here>)
class Service(models.Model):
...
# views.py
def foo_view(request, ...):
...
service = <retrieve Service here>
areas_related = request.POST.getlist('areas_related')
for a in areas_related:
service.areas_related.create(areas_related=a)
...
# template
{% for service in services %}
{% for area_related in service.areas_related.all() %}
{{ area_related }}
{% endfor %}
{% endfor %}
エンコードされた文字列
areas_related
リストを何らかの方法でエンコードして文字列としてモデル フィールドに格納し、取得時にデコードしてリストを取得します。areas_related
すべてが 1 つの列の db に格納されるため、この方法は便利ですが、1 つではなく複数の値のエンコードされた文字列が格納されるため、実際にはクエリを実行できません。
# models.py
import json
class Service(models.Model):
...
areas_related = models.CharField(max_length=<length_here>)
def get_areas_related(self):
return json.loads(self.areas_related)
# views.py
import json
def foo_view(request, ...):
...
service = < retrieve Service here>
areas_related = request.POST.getlist('areas_related')
service.areas_related = json.dumps(areas_related)
service.save()
...
# template
{% for service in services %}
{% for area_related in service.get_areas_related %}
{{ area_related }}
{% endfor %}
{% endfor %}