Как заполнить поле массива Django и получить к нему доступ?

#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. Немного странно, что это не прописано в документах.