我正在尝试将一个字段添加到Django模型中,该模型将代表电子邮件地址列表.我希望用户在管理员的表单中输入逗号分隔的地址列表,然后我的应用程序将解析以发送一系列电子邮件.
我目前的实现涵盖了基本概念,但有很大的局限性.在管理员中,如果我输入一个类似的字符串foo@example.com, bar@example.com,那么它会正确地将其写入数据库中[u'foo@example.com', u'bar@example.com'].但管理员显示此序列化值而不是人性化字符串.更重要的是,如果我编辑并保存记录而不进行任何更改,则相同的转换将更[u'foo@example.com', u'bar@example.com']改为[u"[u'foo@example.com'", u"u'bar@example.com']"].
如何将python列表表示转换回用于管理员的字符串?这是value_to_string方法的目的还是我需要在其他地方进行转换?
我目前的自定义模型字段如下:
class EmailListField(models.TextField):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
if not value:
return
if isinstance(value, list):
return value
return [address.strip() for address in value.split(',')]
def get_db_prep_value(self, value):
if not value:
return
return ','.join(unicode(s) for s in value)
def value_to_string(self, obj):
value = self._get_val_from_obj(obj)
return self.get_db_prep_value(value)
Run Code Online (Sandbox Code Playgroud)
这是基于SeparatedValuesField这里描述的:http://www.davidcramer.net/code/181/custom-fields-in-django.html.