我一直在尝试在Django模型的字段中存储一个整数数组。基于this reply,我一直在尝试使用CommaSeparatedIntegerField,但事实证明这不如名称所暗示的那么直观。
如果我有一个以逗号分隔的整数列表(list = [12,23,31])
,并将其存储在CommaSeparatedIntegerField中,则它将以字符串(retrieved_list outputs u'[1,2,3]')
的形式返回。我不能简单地检索我的整数:例如,int(retrieved_list[1])
输出1而list[1]
输出23。
那么,我是否必须手动解析,还是有其他解决方案?以及CommaSeparatedIntegerField与CharField的区别究竟如何?在我看来,他们表现得非常相似......
答案 0 :(得分:10)
有一个literal_eval函数可以使用相同的方式:
>>> from ast import literal_eval
>>> literal_eval("[1,2,3,4]")
[1, 2, 3, 4]
答案 1 :(得分:5)
此字段类型与CharField之间的唯一区别是它验证数据的格式是否正确 - 只有数字以','分隔。您可以在http://docs.nullpobug.com/django/trunk/django.db.models.fields-pysrc.html#CommaSeparatedIntegerField查看该课程的来源(展开“+”)。
您可以使用eval将这样的字符串转换为实际的Python列表值(不是数组 - 列表是Python的正确术语)。
>>> eval("[1,2,3,4]")
[1, 2, 3, 4]
编辑:eval有安全问题,但更好的方法是使用alral在另一个答案中建议的literal_eval。