1
我想爲支持MySQL的Django項目構建自定義JSON字段。這是我的車型:用於Django的自定義JSONField的InterfaceError
from __future__ import unicode_literals
from django.db import models
from django.db import models
from django.core.serializers.json import DjangoJSONEncoder
import json
name1 = 'name1'
name2 = 'name2'
class JSONField(models.TextField):
"""JSONField is a generic textfield that neatly serializes/unserializes
JSON objects seamlessly"""
# Used so to_python() is called
__metaclass__ = models.SubfieldBase
def to_python(self, value):
"""Convert our string value to JSON after we load it from the DB"""
if value == "":
return None
try:
if isinstance(value, basestring):
return json.loads(value)
except ValueError:
pass
return value
def get_db_prep_save(self, value, connection):
"""Convert our JSON object to a string before we save"""
if value == "":
return None
if isinstance(value, dict):
value = json.dumps(value, cls=DjangoJSONEncoder)
return super(JSONField, self).get_db_prep_save(value, connection)
# Articles/Content
class Content(models.Model):
title = models.CharField(max_length=255)
body = models.TextField()
data = JSONField(blank=True, null=True)
def __unicode__(self):
return self.title
def save(self, *args, **kwargs):
self.data = {
name1 : {
"image_url" : 'https://photosite.com/image1.jpg',
"views" : 0
},
name2 : {
"image_url" : 'https://photosite.com/image2.jpg',
"views" : 0
}
}
super(Content, self).save(*args, **kwargs)
請注意自定義的保存方法的內容模型。當我嘗試保存新的內容對象,我得到這個錯誤:在/管理/ MYAPP /內容
InterfaceError /添加/
錯誤綁定參數2 - 可能是不支持的類型。
我究竟做錯了什麼?這個錯誤甚至意味着什麼。我的意思是說'可能',好像它甚至不確定是否有錯誤。任何幫助?
如果你想全面回溯,你可以在這裏找到它:你打電話給用戶的方法之前 http://pastebin.com/B15hZpbu
你知道有幾個可用的自定義JSON包?儘管你說mysql支持你的stacktrace顯示sqlite? – e4c5
我的意思是我將在生產中使用MySQL。現在,代碼在開發中。對此感到抱歉。 –
這個錯誤不是由django產生的。它來自下層,可能是sqlite3驅動程序。爲什麼不在保存中調用超類方法之前記錄所有字段,並用此更新問題。 – e4c5