我有一个django应用程序,我在其中存储json变量。我已经通过admin存储了json变量,我正在尝试在shell中打印它。我的主要目的是将此变量传递给具有ajax方法的网页。但是当我第一次尝试在shell中打印时,我得到了这个错误
__str__ returned non-string (type list)
我的models.py是这种形式
from django.db import models
from django.utils import timezone
from jsonfield import JSONField
# Create your models here.
class newgrid(models.Model):
data = JSONField()
def __str__(self):
return self.data
我的JSON变量属于这种形式
[{"col":1,"row":1,"size_x":1,"size_y":1},{"col":2,"row":1,"size_x":1,"size_y":1},{"col":3,"row":1,"size_x":1,"size_y":1},{"col":4,"row":1,"size_x":1,"size_y":1},{"col":1,"row":2,"size_x":1,"size_y":1},{"col":2,"row":2,"size_x":1,"size_y":1},{"col":3,"row":2,"size_x":1,"size_y":1},{"col":4,"row":2,"size_x":1,"size_y":1},{"col":1,"row":3,"size_x":1,"size_y":1},{"col":2,"row":3,"size_x":1,"size_y":1},{"col":3,"row":3,"size_x":1,"size_y":1},{"col":4,"row":3,"size_x":1,"size_y":1},{"col":5,"row":1,"size_x":1,"size_y":1}]
在shell中我运行了以下命令
from testforweb.models import newgrid
newgrid.objects.all()
它最初返回此
<QuerySet [<newgrid: newgrid object (1)>]>
但后来我添加了
def __str__(self):
return self.data
只是为了看到实际的JSON变量。但是我收到了错误 如何查看我通过admin coz插入的实际JSON变量我需要将其发送到网页,因为它是
修改1
My updated models.py
from django.db import models
from django.utils import timezone
from jsonfield import JSONField
import simplejson as json
# Create your models here.
class newgrid(models.Model):
data = JSONField()
def __str__(self):
json.dumps(self.data)
答案 0 :(得分:2)
__str__
函数必须返回字符串:
def __str__(self):
return json.dumps(self.data)
答案 1 :(得分:1)
JSON字段实际上将JSON解码为本机python类型(列表和字典)。
__str___
方法总是需要返回一个字符串。
如果你想要json的字符串表示,你应该使用json.dumps(self.data)
或类似的序列化数据字段作为__str__
的返回值。
答案 2 :(得分:1)
使用
handlerCopy(e) {
console.log(e.target.innerHTML);
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();
this.setState(prevState => ({
counter: prevState.counter + 1
}));
alert('Don\'t copy it!');
}
而不是
def __str__(self):
return '%s' % (self.data)