#python #arrays #django #postgresql
#python #массивы #django #postgresql
Вопрос:
Чтобы решить мою (своего рода специфическую) проблему, я обнаружил, что мне нужно использовать Django arrayField: https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/fields/#arrayfield
Я определил его в своем models.py
файле как
Bla = ArrayField(
models.IntegerField(),
size=4
null=True
)
Но как мне на самом деле поместить информацию внутрь?В идеале, как весь список python, так и в одном месте.
И как только оно будет там, как я могу его извлечь? Как на стороне python, так и в .html
файле?
PS: Я не думаю, что вся предыстория проблемы актуальна, поэтому я пока опустил ее, но я, конечно, предоставлю все необходимые подробности, если кому-то будет интересно.
Ответ №1:
Вы просто присваиваете список целых чисел.
class M(models.Model):
bla = ArrayField(models.IntegerField(), size=4, null=True)
m = M.objects.create(bla=[1, 3, 3, 7])
# (or, equivalently,)
m = M()
m.bla = [1, 3, 3, 7]
m.save()
# (or, equivalently,)
m = M(bla=[1, 3, 3, 7])
m.save()
Читая m.bla
, вы получаете обратно список целых чисел, к которому вы можете получить доступ в шаблонах Python или Django, как к любому другому списку.
Смотрите также документацию о различных дополнительных способах поиска массивных полей.
Комментарии:
1. Ого, спасибо! Я получил новое сообщение об ошибке, так что это прогресс! «Менеджер недоступен через экземпляры группы» И (на самом деле без обид : D) вы действительно только что ввели в ответ ту же ссылку, что и я, в вопросе? 😀 Но я обещаю взглянуть на это снова, может быть, теперь я это пойму. Я действительно понятия не имел, что мне пришлось проходить через всю эту проблему .objects.create (), потому что для всех моих других полей мне не нужно. Я предполагаю, что это какая-то встроенная магия ^^
2. Нет, вам не обязательно проходить через
.objects.create
— это просто сокращение для выполненияm = M(bla=...); m.save();
. И это не совсем та же ссылка, это следующий раздел об этих поисковых системах. Но позвольте мне немного изменить свой ответ.3. Немного странно, что это не прописано в документах.