我目前有一个问题,我的程序我的一些输入没有被保存在mysql数据库-任何帮助将不胜感激
这将创建一个自定义用户,即employee、admin和senior employee-这是一个不同的模型,因此需要另一个表
class CustomUser(AbstractUser):
user_type_data=((1,"Admin"),(2,"senioremployee"),(3,"employee"))
user_type=models.CharField(default=1,choices=user_type_data,max_length=20)
这是我的一个用户类型的模型
class senioremployee(models.Model):
id = models.AutoField(primary_key=True)
admin=models.OneToOneField(CustomUser, on_delete=models.CASCADE)
Dob = models.DateField()
Nationality = models.TextField()
Address = models.TextField()
Postcode = models.TextField()
Telephone = models.TextField()
Wage = models.TextField()
Passportnumber = models.TextField()
passportexpirydate = models.DateField()
gender = models.CharField(max_length=255)
profile_pic = models.FileField()
kinname = models.TextField()
kinrelation = models.TextField()
kinaddress = models.TextField()
kinphonenumber = models.TextField()
kinemail = models.TextField()
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now_add=True)
objects = models.Manager()
此函数用于将用户的数据添加到表中
@receiver(post_save,sender = CustomUser)
def create_user_profile(sender,instance,created,**kwargs):
if created:
if instance.user_type==1:
admin.objects.create(admin = instance,Dob="",Nationality="",Address="",Postcode="",Telephone="",Wage="",Passportnumber="",passportexpirydate="",gender="",profile_pic="",kinname="",kinrelation="",kinaddress="",kinphonenumber="",kinemail = "")
if instance.user_type==2:
senioremployee.objects.create(admin = instance,Dob="",Nationality="",Address="",Postcode="",Telephone="",Wage="",Passportnumber="",passportexpirydate="",gender="",profile_pic="",kinname="",kinrelation="",kinaddress="",kinphonenumber="",kinemail = "")
if instance.user_type==3:
employee.objects.create(admin = instance,Dob="",Nationality="",Address="",Postcode="",Telephone="",Wage="",Passportnumber="",passportexpirydate="",gender="",profile_pic="",kinname="",kinrelation="",kinaddress="",kinphonenumber="",kinemail = "")
此函数用于将输入保存到senioremployee的表中,并将email、password、firstname、lastname、username保存到自定义用户的表中,但目前它仅将email、password、firstname、lastname、username存储到自定义用户的表中,而忽略其他用户输入
def add_seniorEmployee_save(request):
if request.method!="POST":
return HttpResponse("Method Not Allowed")
else:
first_name=request.POST.get("first_name")
last_name=request.POST.get("last_name")
username=request.POST.get("username")
email=request.POST.get("email")
password=request.POST.get("password")
Dob=request.POST.get("Dob")
Nationality=request.POST.get("Nationality")
Address=request.POST.get("Address")
Postcode=request.POST.get("Postcode")
Telephone=request.POST.get("Telephone")
Wage=request.POST.get("Wage")
Passportnumber=request.POST.get("Passportnumber")
passportexpirydate=request.POST.get("passportexpirydate")
gender=request.POST.get("gender")
kinname=request.POST.get("kinname")
kinrelation=request.POST.get("kinrelation")
kinaddress=request.POST.get("kinaddress")
kinphonenumber=request.POST.get("kinphonenumber")
kinemail=request.POST.get("kinemail")
try:
user = CustomUser.objects.create_user(username=username,password=password,email=email,first_name=first_name,last_name=last_name,user_type=2)
user.senioremployee.Dob = Dob
user.senioremployee.Nationality = Nationality
user.senioremployee.Address = Address
user.senioremployee.Postcode = Postcode
user.senioremployee.Telephone = Telephone
user.senioremployee.Wage = Wage
user.senioremployee.Passportnumber = Passportnumber
user.senioremployee.passportexpirydate = passportexpirydate
user.senioremployee.gender = gender
user.senioremployee.profile_pic=""
user.senioremployee.kinname = kinname
user.senioremployee.kinrelation = kinrelation
user.senioremployee.kinaddress = kinaddress
user.senioremployee.kinphonenumber = kinphonenumber
user.senioremployee.kinemail = kinemail
user.save()
messages.success(request, "Successfully Added Senior Employee")
return HttpResponseRedirect("/add_seniorEmployee")
except:
messages.error(request, "Couldnt add senior employee")
return HttpResponseRedirect("/add_seniorEmployee")
1条答案
按热度按时间7tofc5zh1#
首先你对你的工作有问题
senioremployee
创建查询。您正在使用Dob
以及passportexpirydate
作为DateField
.但是当你创造
senioremployee
记录您传递的空字符串最终会产生异常。后置保存信号
它将返回异常
所以将yyyy-mm-dd日期格式传递给
Dob
以及passportexpirydate
那么senioremployee
将创建。当您更新记录时,您正在保存
user
再提高的模式post_save
信号,你将创建复制senioremployee
记录哪个返回UNIQUE constraint failed
.所以你必须用这行代码来更新
senioremployee
记录而不是