这里可能发生的是您将 存储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
模型字段中,然后在检索解码时获取列表。这种方法很好,因为所有内容都存储在 db 中的一列中,但是您不能真正对 db 进行任何查询,areas_related
因为它将存储多个值的编码字符串,而不仅仅是一个值。
# 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 %}