我无法在ArrayField中存储字符串。当我尝试在其中保存某些内容时,没有抛出任何异常,但数组仍为空。 以下是来自models.py的一些代码:
# models.py
from django.db import models
import uuid
from django.contrib.auth.models import User
from django.contrib.postgres.fields import JSONField, ArrayField
# Create your models here.
class UserDetail(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
key = models.CharField(max_length=50, default=False, primary_key=True)
api_secret = models.CharField(max_length=50)
user_categories = ArrayField(models.CharField(max_length = 1000), default = list)
def __str__(self):
return self.key
class PreParentProduct(models.Model):
product_user = models.ForeignKey(UserDetail, default=False, on_delete=models.CASCADE)
product_url = models.URLField(max_length = 1000)
pre_product_title = models.CharField(max_length=600)
pre_product_description = models.CharField(max_length=2000)
pre_product_variants_data = JSONField(blank=True, null=True)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
def __str__(self):
return self.pre_product_title
我尝试以这种方式保存它:
catlist = ast.literal_eval(res.text)
for jsonitem in catlist:
key = jsonitem.get('name')
id = jsonitem.get("id")
dictionary = {}
dictionary['name'] = key
dictionary['id'] = id
tba = json.dumps(dictionary)
print("It works till here.")
print(type(tba))
usersearch[0].user_categories.append(tba)
print(usersearch[0].user_categories)
usersearch[0].save()
print(usersearch[0].user_categories)
我得到的输出是:
It works till here.
<class 'str'>
[]
It works till here.
<class 'str'>
[]
[]
这是在StringField中存储字符串的正确方法吗? 我无法将JSONField存储在ArrayField中,因此我必须将其转换为字符串。
我该如何解决这个问题?
答案 0 :(得分:0)
你还没有证明你usersearch[0]
我怀疑它是这样的:
usersearch = UserDetail.objects.all()
如果是这样,您正在对结果集进行更改,那么这些内容是不可变的。试试这个你会发现id也没有改变:
usersearch[0].id = 1000
print usersearch.id
但这有效
usersearch = list(UserDetail.objects.all())
等等
u = usersearch[0]
user_categories = ArrayField(models.CharField(max_length = 1000), default = list)
这是错误的。不应以这种方式使用ArrayFields。您很快就会发现需要搜索它们并
数组不是集合;搜索特定的数组元素可以是一个 数据库错误设计的标志。考虑使用带有行的单独表 对于每个将成为数组元素的项目。这会更容易 搜索,并且很可能针对大量元素进行更好的扩展
参考:https://www.postgresql.org/docs/9.5/static/arrays.html
您需要规范化数据。您需要有一个类别模型,并且您的UserDetail应该通过外键与它相关。