0

While adding user data in DB through a form I created I got this error integrity error at \add_emp and it says foreign key constraint failed I tried deleting dbsqlite3 files, migrations files, and pychache files but that did not work please tell me where I am wrong it's my first time getting this error.

enter image description here This is shown after submitting

This is the Models.py code

from django.db import models

# Create your models here.


class Department(models.Model):
    name = models.CharField(max_length=100,null=True)
    location = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Role(models.Model):
    name = models.CharField(max_length=100, null=True)

    def __str__(self):
        return self.name


class Employee(models.Model):
    first_name = models.CharField(max_length=100, null=False)
    last_name = models.CharField(max_length=100,null=True)
    dept = models.ForeignKey(Department, on_delete=models.CASCADE)
    salary = models.IntegerField(default=0,null=True)
    bonus = models.IntegerField(default=0,null=True)
    role = models.ForeignKey(Role, on_delete=models.CASCADE)
    phone = models.IntegerField(default=0,null=True)
    hire_date = models.DateField(null=True)


    def __str__(self):
        return "%s %s %s" %(self.first_name, self.last_name, self.phone)

This is the views .py code

# Create your views here.
def index (request):
    return render(request,"index.html")

def all_emp (request):
    context={"emps":Employee.objects.all(),"roles":Role.objects.all(),"departments":Department.objects.all()}
    return render(request,"all_emp.html",context)

def add_emp(request):
    if request.method == 'POST':
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        salary = int(request.POST['salary'])
        bonus = int(request.POST['bonus'])
        phone = int(request.POST['phone'])
        dept = int(request.POST['dept'])
        role = int(request.POST['role'])
        new_emp = Employee(first_name= first_name, last_name=last_name, salary=salary, bonus=bonus, phone=phone, dept_id=dept,role_id=role,hire_date = datetime.now())
        new_emp.save()
        return HttpResponse ("Employee added sucessfully")
    
    elif request.method=='GET':
        return render(request, 'add_emp.html')
    else:
        return HttpResponse("An Exception Occured! Employee Has Not Been Added")
        
    
def remove_emp (request):
    return render(request,"remove_emp.html")

def filter_emp (request):
    return render(request,"filter_emp.html")

This is Html Form.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Add Employee</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
  <body>
  <div class="container">
          <h1>Add An Employee!</h1>
      <hr>

<form action="/add_emp" method="post">
    {% csrf_token %}
    <label for="first_name">First Name</label>
    <br>
    <input type="text" id="first_name" name="first_name"><br>

    <label for="last_name">Last Name</label>
    <br>
    <input type="text" id="last_name" name = "last_name"><br>

    <label for="salary">Salary</label>
    <br>
    <input type="number" id="salary" name="salary"> <br>

    <label for="dept">Department</label>
    <br>
    <input type="number" id="dept" name="dept" ><br>

    <label for="role">Role</label>
    <br>
    <input type="number" id="role" name="role" ><br>

    <label for="bonus">Bonus</label>
    <br>
    <input type="number" id="bonus" name="bonus" ><br>

    <label for="phone">Phone Number</label><br>
    <input type="number" id="phone" name="phone"><br>

    <hr>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

  </div>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
    -->
  </body>
  • Does this answer your question? [django.db.utils.IntegrityError: FOREIGN KEY constraint failed](https://stackoverflow.com/questions/54655757/django-db-utils-integrityerror-foreign-key-constraint-failed) – He3lixxx Aug 28 '23 at 11:31

1 Answers1

0

As you're not showing where the error comes from I'm going to assume some things, but it looks like either your dept or role is going wrong when creating a new Employee.

I'd start over and go the Django route and create an actual ModelForm which will do a lot of the work for you https://docs.djangoproject.com/en/4.2/topics/forms/modelforms/. It can do form validation, form rendering and will create an employee object for you. It will help you out a lot as adding new fields is now done automatically.

user20223018
  • 486
  • 1
  • 5