在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'>.
我根据两个要点做了一个实现。
这是一个实现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]
谢谢!