Как вы получаете строку из Django PostgreSQL ArrayField? - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь получить строку из ArrayField в моей базе данных, но она печатает только по символам, а не по полной строке.Например, ArrayField имеет имя words, а в базе данных он отображается как {word1, word2, word3}, поэтому в HTML-коде, который я поместил {{ object.words.0 }}, { отображается на экране.

Как мне заставить его отрендерить word1?

Я добавил django.contrib.postgres к INSTALLED_APPS.Вот как это выглядит в моей модели:

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

class WordArr(models.Model):
     words = ArrayField(models.CharField(max_length=200, null=True))

1 Ответ

0 голосов
/ 22 июня 2019

Я исправил проблему, и это было с моей базой данных.ArrayField в моей модели ранее был CharField, который я изменил.Я думал, что миграции были правильными, однако база данных все еще считывала его как CharField, поэтому вывод был первым символом строки.Я перешел на новую базу данных, и все работало нормально.Мой код ниже для дальнейшего использования:

models.py

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

# Create your models here.
class Word(models.Model):
    first = models.CharField(max_length=50)
    last = models.CharField(max_length=50)
    words = ArrayField(models.CharField(max_length=50, null=True))

    def __str__(self):
        return self.first

views.py

from django.shortcuts import render
from django.views.generic.detail import DetailView
from django.views.generic import CreateView
from .models import Word

# Create your views here.
class ArrayCreateView(CreateView):
    model = Word
    fields = ['first', 'last']
    success_url = '/'

    def form_valid(self, form):
        w = form.save(commit=False)
        random_words = ["word1", "word2", "word3"]
        w.words = random_words

        return super().form_valid(form)

class ArrayDetailView(DetailView):
    model = Word   

word_form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>Create Array</h1>
    <div>
        <form method="POST">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">Submit</button>
        </form>
    </div>
</body>
</html>

word_detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>{{ object.words.0 }}</h1>
</body>
</html>

settings.py

INSTALLED_APPS = [
     ...
     'django.contrib.postgres',
     'arr',
]

urls.py

from django.contrib import admin
from django.urls import path

from arr.views import ArrayCreateView, ArrayDetailView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('create/new/', ArrayCreateView.as_view(), name='create'),
    path('detail/<int:pk>/', ArrayDetailView.as_view(), name='detail')
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...