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