输入未存储在mysql数据库中

t8e9dugd  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(380)

我目前有一个问题,我的程序我的一些输入没有被保存在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")
7tofc5zh

7tofc5zh1#

首先你对你的工作有问题 senioremployee 创建查询。您正在使用 Dob 以及 passportexpirydate 作为 DateField .

class senioremployee(models.Model):
    Dob = models.DateField()
    passportexpirydate = models.DateField()

但是当你创造 senioremployee 记录您传递的空字符串最终会产生异常。
后置保存信号

try:
        senioremployee.objects.create(admin = instance,Dob="",Nationality="",Address="",Postcode="",Telephone="",Wage="",Passportnumber="",passportexpirydate="",gender="",profile_pic="",kinname="",kinrelation="",kinaddress="",kinphonenumber="",kinemail = "")
    except Exception as e:
        print("e)

它将返回异常

['“” value has an invalid date format. It must be in YYYY-MM-DD format.']

所以将yyyy-mm-dd日期格式传递给 Dob 以及 passportexpirydate 那么 senioremployee 将创建。
当您更新记录时,您正在保存 user 再提高的模式 post_save 信号,你将创建复制 senioremployee 记录哪个返回 UNIQUE constraint failed .
所以你必须用这行代码来更新 senioremployee 记录

user.senioremployee.save()

而不是

user.save()

相关问题