2014-09-01 36 views
0

我試圖從一個CVS文件導入用戶。其中一些沒有電子郵件,這導致了一些問題。導入用戶(密鑰(電子郵件)=()已存在)

我使用Django 1.6和標準用戶。

這是錯誤我得到的,試圖導入用戶沒有電子郵件時:

IntegrityError('duplicate key value violates unique constraint "account_emailaddress_email_key"\nDETAIL: Key (email)=() already exists.\n',)

Traceback (most recent call last): 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/celery/app/trace.py", line 240, in trace_task 
    R = retval = fun(*args, **kwargs) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/celery/app/trace.py", line 437, in __protected_call__ 
    return self.run(*args, **kwargs) 
    File "/home/<USER>/.virtualenvs/<SITE>/<PROJECT>/apps/accounts/tasks.py", line 1151, in import_users_from_cvs 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/manager.py", line 154, in get_or_create 
    return self.get_queryset().get_or_create(**kwargs) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/query.py", line 391, in get_or_create 
    six.reraise(*exc_info) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/query.py", line 383, in get_or_create 
    obj.save(force_insert=True, using=self.db) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/base.py", line 545, in save 
    force_update=force_update, update_fields=update_fields) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/base.py", line 573, in save_base 
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/base.py", line 654, in _save_table 
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/base.py", line 687, in _do_insert 
    using=using, raw=raw) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/manager.py", line 232, in _insert 
    return insert_query(self.model, objs, fields, **kwargs) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/query.py", line 1514, in insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 903, in execute_sql 
    cursor.execute(sql, params) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/backends/util.py", line 69, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute 
    return self.cursor.execute(sql, params) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/home/<USER>/.virtualenvs/<SITE>/local/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute 
    return self.cursor.execute(sql, params) 
IntegrityError: duplicate key value violates unique constraint "account_emailaddress_email_key" 
DETAIL: Key (email)=() already exists. 

這裏是分貝結構:

test_db=# \d+ account_emailaddress; 
               Table "public.account_emailaddress" 
    Column |   Type   |        Modifiers        | Storage | Description 
----------+-----------------------+-------------------------------------------------------------------+----------+------------- 
id  | integer    | not null default nextval('account_emailaddress_id_seq'::regclass) | plain | 
user_id | integer    | not null               | plain | 
email | character varying(75) | not null               | extended | 
verified | boolean    | not null               | plain | 
primary | boolean    | not null               | plain | 
Indexes: 
    "account_emailaddress_pkey" PRIMARY KEY, btree (id) 
    "account_emailaddress_email_key" UNIQUE CONSTRAINT, btree (email) 
    "account_emailaddress_email_like" btree (email varchar_pattern_ops) 
    "account_emailaddress_user_id" btree (user_id) 
Foreign-key constraints: 
    "account_emailaddress_user_id_fkey" FOREIGN KEY (user_id) REFERENCES auth_user(id) DEFERRABLE INITIALLY DEFERRED 
Referenced by: 
    TABLE "account_emailconfirmation" CONSTRAINT "account_emailconfirmation_email_address_id_fkey" FOREIGN KEY (email_address_id) REFERENCES account_emailaddress(id) DEFERRABLE INITIALLY DEFERRED 
Has OIDs: no 

有什麼我可以要解決這個問題嗎?

編輯:

我可以生成一個隨機的電子郵件地址,無需每個用戶,但我仍然得到一個錯誤

IntegrityError('duplicate key value violates unique constraint "account_emailaddress_email_key"\nDETAIL: Key (email)=() already exists.\n',)

有「重啓」 account_emailaddress_email_key的一些方法?

回答

0

你不似乎沒有使用標準的Django auth.User來存儲這些電子郵件地址(The email field of the standard django.contrib.auth.User is optional)。 您使用分隔表來存儲用戶電子郵件(account_emailaddress)。

當處理的用戶沒有電子郵件地址時,您不應該嘗試添加電子郵件條目(在此account_emailaddress表中)。由於account_emailaddress.email列的唯一性約束,Postgres會將您嘗試創建的第二封空電子郵件發回給您一個IntegrityError。

相關問題