2010-07-12 4 views
0

내 사용자의 데이터 편집 양식에 뉴스 레터에서 이메일을 추가/삭제하기위한 부울 필드가 있습니다. 나는이 양식 저장 방법 사용자 정의를 작성했습니다 :(Django) EmailField에 문자열 저장하면 10 진수로 int()가 유효하지 않습니다.

def save(self, *args, **kwargs):  
    mail = None 
    if self.cleaned_data['inf_newsletter']: 
     mail = NewsletterEmails(self.instance.user.email) 
     mail.save() 
    else: 
     try: 
      mail = NewsletterEmails.objects.get(email=self.instance.user.email) 
     except NewsletterEmails.DoesNotExist: 
      pass 
     if mail: 
      mail.delete() 

문제는 내가 새로운 NewsletterEmail 객체를 추가 해요 때, 나는 사용자의 이메일에서 읽은 문자열 값을 보내고있다하는 것은 이메일 필드에 저장하는 것으로, 인 오류가 발생 (또는 적어도 난 그렇게 생각) :

Traceback: 
File "/home/myapp/site-packages/django/core/handlers/base.py" in get_response 
    92.     response = callback(request, *callback_args, **callback_kwargs) 
File "/home/myapp/site-packages/django/contrib/auth/decorators.py" in __call__ 
    78.    return self.view_func(request, *args, **kwargs) 
File "/home/myapp/accounts/views.py" in profile_edit 
    95.    form.save() 
File "/home/myapp/accounts/forms.py" in save 
    58.    mail.save() 
File "/home/myapp/site-packages/django/db/models/base.py" in save 
    410.   self.save_base(force_insert=force_insert, force_update=force_update) 
File "/home/myapp/site-packages/django/db/models/base.py" in save_base 
    470.       manager.filter(pk=pk_val).extra(select={'a': 1}).values('a').order_by())): 
File "/home/myapp/site-packages/django/db/models/manager.py" in filter 
    129.   return self.get_query_set().filter(*args, **kwargs) 
File "/home/myapp/site-packages/django/db/models/query.py" in filter 
    498.   return self._filter_or_exclude(False, *args, **kwargs) 
File "/home/myapp/site-packages/django/db/models/query.py" in _filter_or_exclude 
    516.    clone.query.add_q(Q(*args, **kwargs)) 
File "/home/myapp/site-packages/django/db/models/sql/query.py" in add_q 
    1675.        can_reuse=used_aliases) 
File "/home/myapp/site-packages/django/db/models/sql/query.py" in add_filter 
    1614.     connector) 
File "/home/myapp/site-packages/django/db/models/sql/where.py" in add 
    56.     obj, params = obj.process(lookup_type, value) 
File "/home/myapp/site-packages/django/db/models/sql/where.py" in process 
    269.     params = self.field.get_db_prep_lookup(lookup_type, value) 
File "/home/myapp/site-packages/django/db/models/fields/__init__.py" in get_db_prep_lookup 
    210.    return [self.get_db_prep_value(value)] 
File "/home/myapp/site-packages/django/db/models/fields/__init__.py" in get_db_prep_value 
    361.   return int(value) 

Exception Type: ValueError at /user/profile/ 
Exception Value: invalid literal for int() with base 10: '[email protected]' 

내 NewsletterEmail 모델 :

class NewsletterEmails(models.Model): 
    email = models.EmailField(_(u"Email"),) 

방법이 문제를 해결하기 위해서는?

답변

3

전자 메일 필드가 아니라 암시 적으로 생성 된 기본 키 필드에 입력 된 전자 메일 주소를 할당합니다.

사용 :

mail = NewsletterEmails(email=self.instance.user.email) 
관련 문제