【问题标题】:inputs are not being stored in Mysql database输入未存储在 Mysql 数据库中
【发布时间】:2021-04-07 08:39:58
【问题描述】:

我的程序目前有问题,我的一些输入没有保存在 MySQL 数据库中 - 任何帮助将不胜感激

这将创建一个自定义用户,即员工、管理员和高级员工 - 这是一个不同的模型,所以另一个表

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 表中,并将电子邮件、密码、名字、姓氏、用户名保存到自定义用户表中,但目前它只将电子邮件、密码、名字、姓氏、用户名保存到自定义用户表中用户表,而忽略其他用户输入

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")
         

【问题讨论】:

    标签: mysql django


    【解决方案1】:

    首先,您的senioremployee 创建查询有问题。您正在使用Dobpassportexpirydate 作为DateField

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

    但是当您创建 senioremployee 记录时,您传递的是空字符串,最终会产生异常。

    post_save 信号

        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 日期格式传递给 Dobpassportexpirydate 然后将创建 senioremployee

    当您更新记录时,您将再次保存user 模型,这会再次引发post_save 信号,您将创建重复的senioremployee 记录,该记录返回UNIQUE constraint failed

    所以你必须使用这行代码来更新senioremployee记录

    user.senioremployee.save()
    

    而不是

    user.save()
    

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 1970-01-01
      • 2016-01-21
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      相关资源
      最近更新 更多