как использовать массив в Django - PullRequest
2 голосов
/ 04 февраля 2010

У меня есть таблица БД, которая имеет массив целых чисел. Но как я могу добавить это поле в моей модели? Я попытался написать его, используя IntegerField, но при сохранении выдает ошибку

int() argument must be a string or a number, not 'list

Как я могу добавить это поле в мою модель? Я использую это поле в моем views.py, поэтому мне нужно добавить его в мою модель. Есть предложения?

Ответы [ 4 ]

7 голосов
/ 04 февраля 2010

Вас может заинтересовать использование CommaSeparatedIntegerField.

Если у вас есть список целых чисел, подобных этому:

my_ints = [1,2,3,4,5]

и модель, подобная этой:

class MyModel(models.Model):
    values = CommaSeparatedIntegerField(max_length = 200)

затем вы можете сохранить my_ints в MyModel следующим образом:

m = MyModel(values = ','.join(my_ints))
m.save()
1 голос
/ 20 февраля 2010

Я получил это, сказав текстовое поле в моей модели. Так как я использую только это поле для чтения, оно не влияет на меня

1 голос
/ 04 февраля 2010

Бесхитростный 'ответ, вероятно, является лучшим, что вы можете получить, но если вы все еще хотите сохранить массив чисел в одном поле, вы можете сделать это - либо вручную, например выбрать его и затем сохранить в TextField, или написав специальное поле модели, которое автоматически сделает что-то подобное для вас.

Вот документация: http://docs.djangoproject.com/en/1.1/howto/custom-model-fields/

1 голос
/ 04 февраля 2010

Я бы посмотрел на нормализацию базы данных . В частности, ваша база данных даже не находится в 1-й нормальной форме, первой и, вероятно, наиболее значимой из нормальных форм, в которой говорится, что нормализованные данные не должны содержать повторяющихся групп. В результате объектно-реляционный картограф Django столкнется со значительными трудностями при моделировании ваших данных.

Поддерживая только единичные неповторяющиеся типы, Django в некотором смысле обеспечивает первую нормальную форму данных. Вы можете попытаться написать свой собственный SQL для управления этим конкретным полем или, возможно, найти какой-то код в Интернете, но, возможно, лучше было бы реорганизовать это поле в отношение «многие к одному» в своей собственной модели. Вы можете найти документацию по Django по этому здесь .

...