自定义Django字段以存储电子邮件地址列表

And*_*ewF 8 python django

我正在尝试将一个字段添加到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.

hug*_*own 3

我不会那样做。我会将您EmailListField应该关联的任何内容与电子邮件地址字段进行一对多关联。

  • 好吧,那我就尝试一下这种方法。谢谢大家让我直面问题。 (2认同)