我想添加一個字段到一個Django模型,它將代表一個電子郵件地址列表。我希望用戶在管理員中輸入一個以逗號分隔的地址列表,然後我的應用程序會解析併發送一系列電子郵件。自定義Django字段來存儲電子郵件地址列表
我目前的實施涵蓋了基本思想,但有一個重大的侷限性。在管理員中,如果我輸入一個字符串,如[email protected], [email protected]
,那麼它會將其正確寫入數據庫[u'[email protected]', u'[email protected]']
。但是管理員顯示這個序列化的值而不是人性化的字符串。更重要的是,如果我編輯並保存記錄,而不進行任何更改,相同的轉換將[u'[email protected]', u'[email protected]']
更改爲[u"[u'[email protected]'", u"u'[email protected]']"]
。
如何將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)
這是基於這裏所描述的SeparatedValuesField
:http://www.davidcramer.net/code/181/custom-fields-in-django.html。
它需要一個名單將像逗號的文檔例如分隔的列表 - http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field-默認清潔工作? – JamesO 2010-11-02 13:36:37
謝謝,但這個例子是爲了表單域來驗證用戶的輸入。我需要的是一個模型字段,用於將多個地址保存到數據庫中。 – AndrewF 2010-11-02 14:07:29