2016-07-30 7 views
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) 

コンテンツモデルの保存方法カスタムを注意してください。私は新しいコンテンツオブジェクトを保存しようとすると、私はこのエラーを取得する:

InterfaceError管理/ myappに/コンテンツ/ AT /追加/

エラー結合パラメータ2 - おそらくサポートされていないタイプ。

私は間違って何をしていますか?このエラーはどういう意味ですか?つまり、エラーがあるかどうかわからないように、「おそらく」と言います。どんな助け?

あなたが完全なトレースバックをしたい場合は、ここでそれを見つけることができます: http://pastebin.com/B15hZpbu

+0

カスタムJSONパッケージが既にご利用いただけます。あなたはmysqlのサポートについて話していますが、あなたのstacktraceはsqliteを表示していますか? – e4c5

+0

私は、本番環境でMySQLを使用するつもりです。今、コードはdevにあります。混乱をおかけして申し訳ありません。 –

+0

このエラーは、djangoが生成したものではありません。おそらくsqlite3ドライバの下位から来ます。スーパークラスメソッドを呼び出して保存する前に、すべてのフィールドをログに記録しないでください。 – e4c5

答えて

1

あなたのユーザーメソッドを呼び出す前に、このコードは、未定義の変数エラーが発生します。

data = { 
     name1 : { 
      "image_url" : 'https://photosite.com/image1.jpg', 
      "views" : 0 
     }, 
     name2 : { 
      "image_url" : 'https://photosite.com/image2.jpg', 
      "views" : 0 
     } 
    } 

名前1と名前2は、コードでは明確に定義されていません。

関連する問題