【发布时间】:2019-05-24 05:43:22
【问题描述】:
我有在 django 中创建新用户的功能如下:
def initialize(username, password, email, title, firstName, lastName, telephoneNumber, mobileNumber, smsActive, for_company_id = 1):
sUsername = username.lower()
if len(username) > 30:
sUsername = username[:30].lower()
user = User.objects.create_user(sUsername, email, password, last_login=datetime.datetime.now())
user.first_name = firstName
user.last_name = lastName
user.save()
userProfile = UserProfile(user = user, title = title, telephone = telephoneNumber, mobile = mobileNumber, smsActive = smsActive)
userProfile.code2Factor = pyotp.random_base32()
userProfile.forCompanyId = for_company_id
userProfile.main_updated = datetime.datetime.now()
userProfile.save()
return userProfile
然后我按如下方式进行:
user_profile = initialize(input.user.username, password, '', input.title, input.user.first_name, input.user.last_name, input.telephone, input.mobile, sms_active)
user_profile.user.groups.set([Group.objects.get(id=gr.id) for gr in input.groups])
user_profile.cultureMajor = input.cultureMajor
user_profile.offerTax = input.offerTax if 'offerTax' in input else False
user_profile.user.save()
但是当我尝试创建新用户时,出现如下错误:
duplicate key value violates unique constraint "auth_user_pkey" DETAIL: Key (id)=(21811) already exists.
id 21811 存在于数据库中,但最后一个是25530。
为什么 django 不使用下一个数字作为 ID?
更新
- 用户模型是来自 django 的标准模型。
-
UserProfile如下:
class UserProfile(models.Model): forCompanyId = 1 user = models.OneToOneField(to=User, on_delete=models.DO_NOTHING) title = models.CharField(max_length=10, null=True, blank=True) telephone = models.CharField(max_length=50, null=True, blank=True) mobile = models.CharField(max_length=50, null=True, blank=True) smsActive = models.BooleanField(default=False) car_by_car_notification = models.BooleanField(default=True) car_by_car_mail = models.BooleanField(default=True) daily_digest = models.BooleanField(default=True) offer_tax = models.BooleanField(default=False) cultureMajor = models.CharField(max_length=3, blank=False, default='en') cultureMinor = models.CharField(max_length=3, blank=True) modulesBlocked = models.ManyToManyField(to=Module, through='UserModuleBlocked') otherEmails = models.CharField(max_length=512, null=True, blank=True) otherContact = models.CharField(max_length=256, null=True, blank=True) browser = models.CharField(max_length=256, null=True, blank=True) picture = models.ImageField(upload_to=settings.MEDIA_ROOT, blank=True, null=True) code2Factor = models.CharField(max_length=256, null=True, blank=True) mobile2Factor = models.BooleanField(default=False) authenticator2Factor = models.BooleanField(default=False) main_user_id = models.IntegerField(null=True) main_updated = models.DateTimeField(_('date updated on main'), default=timezone.now)
【问题讨论】:
-
你能显示用户和userprofile模型吗
-
您使用的是哪个数据库?
-
@c.grey 已更新。
-
@JPG PostgreSQL
-
尝试从 django-shell 创建一个虚拟用户为
User.objects.create(id=25531,username="fooo")@Boky