在Django-nonrel admin中使用DictField

时间:2013-12-11 15:54:51

标签: python django mongodb

在Django-nonrel中使用ListField和EmbeddedModelFields需要一些黑客攻击

https://gist.github.com/ielshareef/3011156

https://gist.github.com/jonashaag/1200165

但没有提及如何使用DictField()

我收到错误:

No form field implemented for <class 'djangotoolbox.fields.DictField'>.

我根据两个要点做了一个实现。

在Django admin

中使用DictField()

这是一个实现DictFields的解决方案。

models.py 中的

from .forms import StringListField, ObjectListField, DictionaryField
#To use DictFields in Django admin

class DictOverrideField(DictField):
    def formfield(self, **kwargs):
        return models.Field.formfield(self, DictionaryField, **kwargs)
forms.py

中的

class DictionaryField(forms.CharField):
    def generate_dictfield(self, field_name, field, **kwargs):
        defaults = {
            'required': field.required,
            'initial': field.default,
            'label': self.get_field_label(field_name, field),
            'help_text': self.get_field_help_text(field),
    }

        defaults.update(kwargs)
        return DictField(**defaults)

    def to_python(self, value):
        if isinstance(value, basestring):
            value = ast.literal_eval(value)
        if isinstance(value, dict):
            return value
        raise ValueError('"%s" could not be converted to a dict.' % value)

我绝对会喜欢任何其他可能的解决方案。[在forms.py中导入ast]

谢谢!

0 个答案:

没有答案