JSONField
aと aの 2 つのカスタム Django フィールドがありCompressedField
、どちらもうまく機能します。私も を持ちたいと思ってCompressedJSONField
います。私はむしろこれができることを望んでいました:
class CompressedJSONField(JSONField, CompressedField):
pass
しかし、インポート時に次のようになります:
RuntimeError: maximum recursion depth exceeded while calling a Python object
Django で複数の継承を持つモデルを使用することに関する情報は見つかりますが、フィールドで同じことを行うことについては何もありません。これは可能でしょうか?それともこの段階であきらめるべきでしょうか?
編集:
明確にするために、次のコードにはまったく同じ問題があるため、これは私のコードの詳細とは何の関係もないと思います。
class CustomField(models.TextField, models.CharField):
pass
編集2:
現在、Python 2.6.6 と Django 1.3 を使用しています。以下は、ストリップされた右下のテスト例の完全なコードです。
customfields.py
from django.db import models
class CompressedField(models.TextField):
""" Standard TextField with automatic compression/decompression. """
__metaclass__ = models.SubfieldBase
description = 'Field which compresses stored data.'
def to_python(self, value):
return value
def get_db_prep_value(self, value, **kwargs):
return super(CompressedField, self)\
.get_db_prep_value(value, prepared=True)
class JSONField(models.TextField):
""" JSONField with automatic serialization/deserialization. """
__metaclass__ = models.SubfieldBase
description = 'Field which stores a JSON object'
def to_python(self, value):
return value
def get_db_prep_save(self, value, **kwargs):
return super(JSONField, self).get_db_prep_save(value, **kwargs)
class CompressedJSONField(JSONField, CompressedField):
pass
models.py
from django.db import models
from customfields import CompressedField, JSONField, CompressedJSONField
class TestModel(models.Model):
name = models.CharField(max_length=150)
compressed_field = CompressedField()
json_field = JSONField()
compressed_json_field = CompressedJSONField()
def __unicode__(self):
return self.name
この行を追加するとすぐに、compressed_json_field = CompressedJSONField()
Django の初期化時にエラーが発生します。