我已经用create_user_profile函数连接创建用户,当我创建i用户时出现问题,我似乎连接函数被调用两次而UserPRofile试图创建两次,女巫会发出错误
列user_id不是唯一的
Request Method: POST
Request URL: http://127.0.0.1:8000/register/
Django Version: 1.3
Exception Type: IntegrityError
Exception Value:
column user_id is not unique
Exception Location: c:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 234
Python Executable: c:\Python27\python.exe
Python Version: 2.7.2
这是调试日志:
[13/Apr/2012 10:20:57] "GET /register/ HTTP/1.1" 200 176691
DEBUG:django.db.backends:(0.002) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."last_name" = favicon ; args=(u'favicon',)
DEBUG:django.db.backends:(0.001) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."last_name" = testuser2 ; args=(u'testuser2',)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."username" LIKE testuser2@gmail.com ESCAPE '\' ; args=(u'testus
er2@gmail.com',)
DEBUG:django.db.backends:(0.001) INSERT INTO "auth_user" ("username", "first_name
", "last_name", "email", "password", "is_staff", "is_active", "is_superuser", "la
st_login", "date_joined") VALUES (testuser2@gmail.com, , , testuser2@gmail.com, s
ha1$9bc1b$c9d377a1bf228ef74eb6931a9ed02d5c455e1576, False, True, False, 2012-04-1
3 10:21:13.949000, 2012-04-13 10:21:13.949000); args=(u'testuser2@gmail.com', '',
'', u'testuser2@gmail.com', 'sha1$9bc1b$c9d377a1bf228ef74eb6931a9ed02d5c455e1576
', False, True, False, u'2012-04-13 10:21:13.949000', u'2012-04-13 10:21:13.94900
0')
====================================
=
DEBUG:django.db.backends:(0.002) INSERT INTO "page_userprofile" ("user_id", "thum
b", "name", "title", "description", "phone", "birthday", "address", "lat", "lng",
"gender", "creation_date", "updation_date") VALUES (13, , , , , , None, , , , ,
2012-04-13 10:21:14.131000, 2012-04-13 10:21:14.131000); args=(13, '', '', '', ''
, '', None, '', '', '', '', u'2012-04-13 10:21:14.131000', u'2012-04-13 10:21:14.
131000')
DEBUG:django.db.backends:(0.002) INSERT INTO "page_pagesettings" ("user_id", "bac
kground_url", "background_repeat", "showAvatar", "showTags", "color_background",
"color_panel_background", "color_panel_background_opacity", "color_name", "color_
title", "color_description", "color_links", "font_name", "font_title", "font_desc
ription", "font_tags_and_links", "font_size_name", "font_size_title", "font_size_
description", "font_size_tags_and_links", "can_contact_via_email", "panel_positio
n") VALUES (13, , 0, False, True, , , , , , , , , , , , , , , , True, ); args=(13
, '', u'0', False, True, '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', True, '')
====================================
=
DEBUG:django.db.backends:(0.002) INSERT INTO "page_userprofile" ("user_id", "thum
b", "name", "title", "description", "phone", "birthday", "address", "lat", "lng",
"gender", "creation_date", "updation_date") VALUES (13, , , , , , None, , , , ,
2012-04-13 10:21:14.442000, 2012-04-13 10:21:14.442000); args=(13, '', '', '', ''
, '', None, '', '', '', '', u'2012-04-13 10:21:14.442000', u'2012-04-13 10:21:14.
442000')
DEBUG:django.db.backends:(0.000) SELECT "page_userprofile"."id", "page_userprofil
e"."user_id", "page_userprofile"."thumb", "page_userprofile"."name", "page_userpr
ofile"."title", "page_userprofile"."description", "page_userprofile"."phone", "pa
ge_userprofile"."birthday", "page_userprofile"."address", "page_userprofile"."lat
", "page_userprofile"."lng", "page_userprofile"."gender", "page_userprofile"."cre
ation_date", "page_userprofile"."updation_date" FROM "page_userprofile" LIMIT 21;
args=()
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 1 ; args=(1,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 2 ; args=(2,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 4 ; args=(4,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 5 ; args=(5,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 7 ; args=(7,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 8 ; args=(8,)
DEBUG:django.db.backends:(0.001) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 9 ; args=(9,)
DEBUG:django.db.backends:(0.001) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 10 ; args=(10,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 11 ; args=(11,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 12 ; args=(12,)
DEBUG:django.db.backends:(0.000) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."id" = 13 ; args=(13,)
[13/Apr/2012 10:21:15] "POST /register/ HTTP/1.1" 500 446959
DEBUG:django.db.backends:(0.001) SELECT "auth_user"."id", "auth_user"."username",
"auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_us
er"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_
superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user"
WHERE "auth_user"."last_name" = favicon ; args=(u'favicon',)
连接:
def create_user_profile(sender, instance, created, **kwargs):
if created:
print('')
print('')
print('=========================================')
print('')
print('')
UserProfile.objects.create(user=instance)
PageSettings.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
创建用户:
newUser = User.objects.create_user(username, username, password)
newUser.last_name = slug
if(registerAs == 'company'):
newUser.first_name = 'company'
else:
newUser.first_name = 'user'
#newUser.save()
答案 0 :(得分:11)
使用dispatch_uid
参数为您的信号提供唯一标识符。
post_save.connect(create_user_profile, sender=User, dispatch_uid="create_user_profile")
有关详细信息,请参阅django docs。
答案 1 :(得分:4)
您可以通过在方法中添加额外的健全性检查来避免此问题:
def create_user_profile(sender, instance, created, **kwargs):
if created and not UserProfile.objects.exists(user=instance):
UserProfile.objects.create(user=instance)
PageSettings.objects.create(user=instance)