迭代Django模型字段会产生不需要的格式

时间:2016-02-23 15:25:59

标签: django-models python-3.4

Python3.4 Django1.9 Noob here ...:)

我正在尝试遍历Django字段但是没有得到想要的结果,这是图片:

模型字段“info”可以包含字符串,在某些情况下可以包含python列表。在这种情况下我的问题是它是一个列表,我必须遍历它......

e.g:

说“info”字段有这样的东西:['2016-02-23','2016-03-01']我尝试在Django1.9模板上循环它,如下所示:

{% for i in dates %} {{i}}<br /> {% endfor %}

我希望看到这样的事情:

2016-02-23
2016-03-01

相反,我得到了这个:

[
'
2
0
1
6
-
0
2
-
2
3
'
,

'
2
0
1
6
-
0
3
-
0
1
'
] 

这让我觉得掌握数据的mySQL字段让我觉得这是一个python列表......我改变数据库字段格式的能力有限......任何帮助都会受到赞赏!

models.py

class Events(....
    info = models.CharField(max_length=150, blank=True)

views.py

dates_list = []
obj_dates = Events.objects.filter(id=id)
for i in obj_dates:
    dates_list.append(i.info)

context = {"dates": dates_list)

Django 1.9模板

{% for i in dates %} {{i}} {% endfor %}

2 个答案:

答案 0 :(得分:0)

只看你的代码

obj_dates = Events.objects.filter(id=id)

只会给你一个条目(因为你按id过滤) - 你只返回一个只有一个对象的查询集。

使用时:

for i in obj_dates:
    dates_list.append(i.info)

你附加一个字符串&#34; [&#39; 2016-02-23&#39;,&#39; 2016-03-01&#39;]&#34; 到dates_list。也就是说,dates_list只是一个包含单个字符串的列表 - 它似乎是一个包含列表的列表,但它是一个包含字符串的列表。

python字符串中的

是可迭代的,因此模板一次迭代字符串中的一个字符,从而返回

[
'
2
...

<强>解决方案

一个。黑客的方式

dates_list.append(list(i.info))

将转换该字符串&#34; [&#39; 2016-02-23&#39;,&#39; 2016-03-01&#39;]&#34;到列表

B中。更多django-ish方法

问问自己,你能以更好的方式存储日期吗? 一种方法是使用dateField然后使用m2m,这样你就可以存储多个日期。

class Events(models.Model)
    info = models.CharField(max_length=150, blank=True)
    dates = models.ManyToManyField(Dates, related_name='events', blank=True)

class Dates(models.Model)
    date = models.DateField(auto_now=False, auto_now_add=False)

答案 1 :(得分:0)

感谢luke_aus的帮助!

我也找到了一些在某些情况下可行的东西...... 如果您认为自己处于需要解压缩或循环存储在CharField中的Python列表的情况下,请尝试这个......在我的情况下它运行良好......

<强> Views.py

import ast

date_list = []
for i in obj: 
    l = {
        'dates': ast.literal_eval(i.info), # i.info is a CharField containing a python list
    }
    dates_list.append(l)

<强>模板

{% for d in dates %}
    {{d}}<br>
{% endfor %}


2016-02-23
2016-03-01