我有一个长整数列表,指定给django模型Charfield。将longs列表转换为独角兽列表。
other_parents = models.CharField(max_length=300, blank=True)
final_list = [1L, 2L, 11L, 84L]
self.parent_list = final_list
print self.parent_list
打印u'1',u'2',u'11',u'84‘
我们能不能把它记在长的名单上。
发布于 2014-07-15 06:16:35
基于Django文档:编写自定义模型字段,我创建了简单的字段LongListAsTextField()
,它扩展了默认的django.db.models.TextField
,并使用to_python
和get_prep_value
方法将多头列表、从列表和字符串转换为字符串。
models.py
from __future__ import absolute_import
from django.db import models
from .fields import LongListAsTextField
class Record(models.Model):
parent_list = LongListAsTextField()
fields.py
从django.db导入模型
从django.utils.six导入with_metaclass
class LongListAsTextField(with_metaclass(models.SubfieldBase, models.TextField)):
def to_python(self, value):
if isinstance(value, list):
return value
return [
long(val)
for val in value.split(',')
if val.isdigit()
]
def get_prep_value(self, value):
return ','.join([str(val) for val in value])
外壳
Record(parent_list=[1,2]).save()
record = Record.objects.last()
record.parent_list # returns [1L, 2L]
发布于 2014-07-15 11:25:18
Django确实可以处理数据库CharField
字段中的多头列表的序列化和存储,而无需执行任何操作。您不需要自定义字段;CharField
将使用bytes()
转换列表,将其转换为UTF8,并将其存储在数据库中。您的列表可能包含字符串、数字、元组、列表、切分、布尔和无,或它们的组合。
问题是,当从数据库检索列表时,它将是一个unicode字符串,而不是Python列表。没有问题,只要您将数据类型限制在上面提到的那些类型,您就可以使用ast.literal_eval()
安全地取消列表:
在your_app/models.py中
from django.db import models
class List(models.Model):
the_list = models.CharField(max_length=300, blank=True)
然后在python manage.py shell
>>> import ast
>>> from your_app.models import List
>>> original_list = [1, 2, 3, 444L, 1100L, -1234, 11.72, 'hi there', u'\u3030\u3000', {'a': 1, 'b': 2, 'c': [1, 2, 3]}, ('this', 'is', 'a', 'tuple'), True, None]
>>> List(the_list=original_list).save()
>>> retrieved_list = List.objects.last()
>>> retrieved_list
u"[1, 2, 3, 444L, 1100L, -1234, 11.72, 'hi there', u'\\u3030\\u3000', {'a': 1, 'c': [1, 2, 3], 'b': 2}, ('this', 'is', 'a', 'tuple'), True, None]"
>>> original_list == ast.literal_eval(retrieved_list.the_list)
True
这表明该列表是通过数据库成功往返的。
https://stackoverflow.com/questions/24749762
复制相似问题