python - 你如何从 Django PostgreSQL ArrayField 中获取字符串?

标签 python django python-3.x postgresql django-models

我试图从我的数据库中的 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))

最佳答案

我解决了这个问题,它与我的数据库有关。我模型中的 ArrayField 以前是我更改的 CharField。我认为迁移是正确的,但数据库仍在将其作为 CharField 读取,因此输出是字符串的第一个字符。我迁移到一个新的数据库,一切正常。我的代码在下面以供进一步引用:

模型.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')
]

关于python - 你如何从 Django PostgreSQL ArrayField 中获取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56679835/

相关文章:

python - 如何每秒更新 NumericProperty?

python - 设置 QScrollArea 的最小合理宽度

javascript - 试图在 django admin 中显示/隐藏 change_list 过滤器

python - 如何在 Django urls.py 中使用 slug 配置类别、子类别和帖子?

python - Qt 按钮样式从 ui 预览到原始窗口各不相同

python - 为二叉树实现 DFS 和 BFS

python - 正则表达式搜索显示不同的结果

python - tzlocal 为我提供 UTC 作为我的本地时区

python - 我是否需要创建 session 表才能使用 Flask-Session SqlAlchemySessionInterface

python - 检测用户是否点击了 'maximized'按钮