我正在构建一个Django数据模型,我希望能够在其中一个变量中存储一个字符串数组;我怎么能这样做?
e.g。
class myClass(models.Model):
title = models.CharField(max_length=50)
stringArr = models.???
感谢您的帮助。
答案 0 :(得分:9)
您可以使用一些像JSON这样的序列化机制。有一个字段定义的片段可能对你有用:
http://djangosnippets.org/snippets/1478/(请查看上一条评论中的代码)
使用此类字段,您可以将字符串无缝地放入列表中并将其分配给此类字段。字段抽象将完成其余的工作。与阅读相同。
答案 1 :(得分:7)
创建另一个包含带有可选订单的字符串的模型,将ForeignKey
返回myClass
,然后将数组存储在那里。
答案 2 :(得分:4)
你可以使用cPickle ......
class myClass(models.Model):
title = models.CharField(max_length=50)
stringArr = models.TextField()
from cPickle import loads, dumps
data = [ { 'a':'A', 'b':2, 'c':3.0 } ]
obj = Myclass.objects.get(pk=???)
# pickle data into a string-like format
obj.stringArr = dumps(data)
obj.save()
# restore original data
data = loads(obj.stringArr)
答案 3 :(得分:3)
我为模型完成了此操作,
from django.contrib.postgres.fields import ArrayField
from django.db import models
class Skill(models.Model):
name = models.CharField(max_length=50)
skills = ArrayField(models.CharField(max_length=200), blank=True)
要创建
Skill.objects.create(name='First name', skills=['thoughts', 'django'])
要查询
Skill.objects.filter(skills__contains=['thoughts'])
您可以参考django文档以获取更多帮助
https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/
我希望这会有所帮助
答案 4 :(得分:1)
如果您使用的是PostgreSQL或MongoDB(带有djongo),您可以这样做
对于PostgreSQL:
from django.contrib.postgres.fields import ArrayField
对于MongoDB(带有Djongo):
from djongo import models
from django.contrib.postgres.fields import ArrayField
然后
stringArr = ArrayField(models.CharField(max_length=10, blank=True),size=8)
以上两种情况都适用。
答案 5 :(得分:0)
您可以使用JSONField
来实现以下功能:
from django.db import models
from django.contrib.postgres.fields import JSONField
class TestModel(models.Model):
title = models.CharField(max_length=100)
strings = JSONField(default=list, blank=True, null=True)
def __str__(self):
return self.title
例如:
In [1]: fruits = ['banana', 'apple', 'orange']
In [2]: TestModel.objects.create(title='my set', strings=fruits)
Out[2]: <TestModel: my set>
In [3]: o = TestModel.objects.first()
In [4]: o.strings
Out[4]: ['banana', 'apple', 'orange']