Python /register/'中的Django数据错误;整数超出范围';
我试图用django创建一个自定义注册系统,但当我提交注册表单时,在/register/处出现一个数据错误,“整数超出范围”。有什么问题吗 Django说错误来自这个文件“forms.py” 附则;我在使用postgres数据库 我的代码:Python /register/'中的Django数据错误;整数超出范围';,python,django,Python,Django,我试图用django创建一个自定义注册系统,但当我提交注册表单时,在/register/处出现一个数据错误,“整数超出范围”。有什么问题吗 Django说错误来自这个文件“forms.py” 附则;我在使用postgres数据库 我的代码: from django import forms from django.conf import settings from .models import recordBuddyUser from django.views.generic import Cr
from django import forms
from django.conf import settings
from .models import recordBuddyUser
from django.views.generic import CreateView
from django.core.exceptions import ValidationError
# from django.contrib.auth.forms import UserCreationForm
class RegisterForm(forms.ModelForm):
companyname = forms.CharField(widget=forms.TextInput(
attrs={
'type': 'text',
'name': 'company-nam',
'placeholder': 'company Name',
'id': 'exampleInputcompanyName',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
companyadministrator = forms.CharField(widget=forms.TextInput(
attrs={
'type': 'text',
'name': 'administrator',
'id': 'exampleAdminName',
'placeholder': 'company Admin',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
companyphone = forms.IntegerField(widget=forms.NumberInput(
attrs={
'maxlenght': '15',
'type': 'number',
'name': 'companyphonenumber',
'placeholder': 'company Phone',
'id': 'examplecompanyPhoneNumber',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
companyemail = forms.CharField(widget=forms.EmailInput(
attrs={
'type': 'email',
'name': 'company-email',
'id': 'exampleInputEmail',
'placeholder': 'Email Address',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
companypassword = forms.CharField(widget=forms.PasswordInput(
attrs={
'type': 'password',
'name': 'password',
'placeholder': 'Password',
'id': 'exampleInputPassword',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
companypasswordconfirm = forms.CharField(widget=forms.PasswordInput(
attrs={
'type': 'password',
'name': 'confirm-password',
'id': 'exampleRepeatPassword',
'placeholder': 'Repeat Password',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
class Meta:
model = recordBuddyUser
fields = ('companyname', 'companyemail', 'companyphone',
'companyadministrator', 'companypassword', 'companypasswordconfirm')
def clean_username(self):
username = self.cleaned_data['companyname'].lower()
recordBuddy_user = recordBuddyUser.objects.filter(companyname=username)
if recordBuddy_user.count():
raise ValidationError(f"This company name '{username}' already exists !!")
return username
def clean_adminname(self):
adminname = self.cleaned_data['companyadministrator'].lower()
recordBuddy_user = recordBuddyUser.objects.filter(
companyadministrator=adminname)
if recordBuddy_user.count():
raise ValidationError(f"This Admin name '{adminname}' already exists !!")
return adminname
def clean_email(self):
email = self.cleaned_data['companyemail'].lower()
recordBuddy_user = recordBuddyUser.objects.filter(companyemail=email)
if recordBuddy_user.count():
raise ValidationError(f"This company email '{email}' already exists !!")
return email
def clean_phonenumber(self):
phonenumber = self.cleaned_data['companyphone']
recordBuddy_user = recordBuddyUser.objects.filter(
companyphonenumber=phonenumber)
if recordBuddy_user.count():
raise ValidationError(f"This company phone number '{phonenumber}' already exists!!")
return phonenumber
def clean_password(self):
password1 = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('confirm-password')
if password1 and password2 and password1 != password2:
raise ValidationError("Your passwords don't match.")
return password2
def save(self, commit=True):
user = recordBuddyUser.objects.create_user(
self.cleaned_data['companyname'],
self.cleaned_data['companyemail'],
self.cleaned_data['companyadministrator'],
self.cleaned_data['companyphone'],
self.cleaned_data['companypassword'],
)
print ('New user saved')
return user
class LoginForm(forms.ModelForm):
companyemail = forms.CharField(widget=forms.EmailInput(
attrs={
'type': 'email',
'name': 'company-email',
'id': 'exampleInputEmail',
'aria-describedby': 'emailHelp',
'placeholder': 'Enter Email Address...',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
companypassword = forms.CharField(widget=forms.PasswordInput(
attrs={
'type': 'password',
'name': 'password',
'placeholder': 'Password',
'id': 'exampleInputPassword',
'class': 'form-control rounded-pill btn-user p-4 form-control-user'
}
)
)
remember_me = forms.BooleanField(required=False, widget=forms.CheckboxInput(
attrs={
'type': 'checkbox',
'id': 'customCheck',
'name': 'remember-me',
'class': 'custom-control-input'
}
)
)
class Meta:
model = recordBuddyUser
fields = ('companyemail', 'companypassword')
def clean_email(self):
email = self.cleaned_data['companyemail'].lower()
recordBuddy_user = recordBuddyUser.objects.filter(companyemail=email)
if recordBuddy_user.count():
raise ValidationError(f"This company email '{email}' already exists !!")
return email
def clean_username(self):
username = self.cleaned_data['companyname'].lower()
recordBuddy_user = recordBuddyUser.objects.filter(companyname=username)
if recordBuddy_user.count():
raise ValidationError(f"This company name '{username}' already exists !!")
return username
def clean_password(self):
password1 = self.cleaned_data['password']
password2 = self.cleaned_data['confirm-password']
if password1 and password2 and password1 != password2:
raise ValidationError("Your passwords don't match.")
return password2
def remember_me(self):
remember_me = self.cleaned_data['remember_me']
# remember_me = True
if remember_me:
# 2 weeks
self.request.session.set_expiry(1209600)
settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False
return True
else:
return False
django回溯将这部分代码突出显示为错误代码,我真的不知道该怎么做
回溯代码:
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/backends/utils.py in _execute
return self.cursor.execute(sql, params) …
▶ Local vars
The above exception (integer out of range ) was the direct cause of the following exception:
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/core/handlers/exception.py in inner
response = get_response(request) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response
response = self.process_exception_by_middleware(e, request) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) …
▶ Local vars
/home/thefixer/django_stuff/record_Buddy/record_Buddy_Network/views.py in register_view
regform.save() …
▶ Local vars
/home/thefixer/django_stuff/record_Buddy/record_Buddy_Network/forms.py in save
self.cleaned_data['companypassword'], …
▶ Local vars
/home/thefixer/django_stuff/record_Buddy/record_Buddy_Network/models.py in create_user
user.save(using=self._db) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/contrib/auth/base_user.py in save
super().save(*args, **kwargs) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/models/base.py in save
force_update=force_update, update_fields=update_fields) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/models/base.py in save_base
force_update, using, update_fields, …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/models/base.py in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/models/base.py in _do_insert
using=using, raw=raw, …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/models/manager.py in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/models/query.py in _insert
return query.get_compiler(using=using).execute_sql(returning_fields) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/models/sql/compiler.py in execute_sql
cursor.execute(sql, params) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/backends/utils.py in execute
return super().execute(sql, params) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/backends/utils.py in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/backends/utils.py in _execute_with_wrappers
return executor(sql, params, many, context) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/backends/utils.py in _execute
return self.cursor.execute(sql, params) …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/utils.py in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value …
▶ Local vars
/home/thefixer/django_stuff/django_job/lib/python3.6/site-packages/django/db/backends/utils.py in _execute
return self.cursor.execute(sql, params) …
▶ Local vars
regform.save()仅来自my views.py,但其他两个来自上面的代码段
下面是我的自定义用户模型,我将其重命名为recordBuddyUser,我想在数据库中指定我自己的字段,尽管现在我想到了,我可能已经考虑过了。此外,我还将admin用户字段与常规字段放在同一个模型(recordBuddyUser)中,我希望这样可以
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import (
PermissionsMixin,
AbstractBaseUser,
BaseUserManager,
)
# Custom models to override django default User and handle all User intercations
class User_manager(BaseUserManager):
def create_user(self, companyname, companyemail, companyadministrator, companyphonenumber, companypassword):
companyemail = self.normalize_email(companyemail)
user = self.model(companyname=companyname, companyemail=companyemail,
companyadministrator=companyadministrator, companyphonenumber=companyphonenumber,
companypassword=companypassword,
)
user.set_password(companypassword)
user.save(using=self._db)
return user
def create_superuser(self, admin_username, admin_email, admin_gender, admin_password, admin_position):
user = self.create_user(admin_username=admin_username, admin_email=admin_email,
admin_gender=admin_gender, admin_position=admin_position, admin_password=admin_password
)
# user.set_password(admin_password)
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
class recordBuddyUser(PermissionsMixin, AbstractBaseUser):
''' This model handles the details of users on Aqua Buddy '''
companyname = models.CharField(max_length=200, unique=True)
companyemail = models.EmailField(max_length=200, default=None)
companyphonenumber = models.IntegerField()
companypassword = models.CharField(max_length=2083, default=None)
companyadministrator = models.CharField(max_length=200)
# companylogo = models.CharField(max_length=2083, null=True)
dateregistered = models.DateTimeField(default=timezone.now)
# companyletterhead = models.CharField(max_length=2083, null=True)
# recordBuddy Admin fields
dateregistered = models.DateTimeField(default=timezone.now)
admin_email = models.EmailField(max_length=200, default=None, unique=True)
admin_position = models.CharField(max_length=200, blank=True)
admin_username = models.CharField(max_length=200, blank=True)
admin_password = models.CharField(
max_length=2083, default=None, blank=True)
gender_choices = [("M", "Male"), ("F", "Female"), ("O", "Others")]
admin_gender = models.CharField(choices=gender_choices,
default="M", max_length=1, blank=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
REQUIRED_FIELDS = ["admin_username", "admin_email", "admin_position"]
USERNAME_FIELD = "companyname"
objects = User_manager()
def __str__(self):
return self.companyname
我不知道丢失了什么,但计算机当然没有错。罪魁祸首似乎是
companyphonenumber
字段中的值,因为它被声明为整数字段。你可能传递了一个完整的国际号码,比如541112345678
您需要将该字段更改为另一种类型,可能最好是类似的CharField
。这不是完整的回溯。说明错误的行丢失。在没有完整回溯的情况下,我不确定此问题的答案是什么,但我注意到您在companyphone下有一个打字错误“maxlenght”:“15”
。可能会导致错误。谢谢@Cm0295,我甚至没有看到。我还添加了问题的完整回溯。您确定调用recordBuddyUser.objects.create\u user()
中的参数与预期参数匹配吗?您应该将模型的代码添加到问题中谢谢您的回复@ivissani,为了更清晰,我已将我的自定义模型添加到问题中。