Как я могу сохранить массив строк в модели Django? - PullRequest
14 голосов
/ 28 ноября 2010

Я строю модель данных Django и хочу иметь возможность хранить массив строк в одной из переменных;как я могу это сделать?

например

class myClass(models.Model):
    title = models.CharField(max_length=50)
    stringArr = models.???

Спасибо за помощь.

Ответы [ 4 ]

9 голосов
/ 28 ноября 2010

Вы можете использовать некоторый механизм сериализации, например, JSON. Есть фрагмент с определением поля, который может быть вам полезен:

http://djangosnippets.org/snippets/1478/ (взгляните на код в последнем комментарии)

С таким полем вы можете легко помещать строки в список и назначать их этому полю. Абстракция поля сделает все остальное. То же самое с чтением.

7 голосов
/ 28 ноября 2010

Создайте другую модель, которая содержит строку с необязательным порядком, верните ей ForeignKey обратно к myClass и сохраните там ваш массив.

4 голосов
/ 28 ноября 2010

Вы можете использовать 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)
1 голос
/ 17 декабря 2018

Если вы используете PostgreSQL или MongoDB (с djongo), вы можете сделать это

Для PostgreSQL:

from django.contrib.postgres.fields import ArrayField

Для MongoDB (с Джонго):

from djongo import models
from django.contrib.postgres.fields import ArrayField

Тогда

stringArr = ArrayField(models.CharField(max_length=10, blank=True),size=8)

Вышеуказанное работает в обоих случаях.

...