'django creating new record when update existing record

My models of Employee registration is as follow.

class EmployeeRegistration(models.Model):
#Departmental Details

    EmpId = models.IntegerField(verbose_name='EmpId')
    EmpImage = models.ImageField(default='default.png',upload_to='profile_pic/%Y/%m/%d')
    EmpSafetyCard= models.ImageField(default='default.png',upload_to='profile_pic/%Y/%m/%d')
    Site = models.ForeignKey(Site,on_delete=models.CASCADE,max_length=150,verbose_name='Site')
    Department =  models.ForeignKey(Department,on_delete=models.CASCADE,max_length=150,verbose_name='Department')
    Category = models.ForeignKey(Category,on_delete=models.CASCADE,max_length=150,verbose_name='Category')
    Designation = models.ForeignKey(Designation,on_delete=models.CASCADE,max_length=150,verbose_name='Designation')
    PfApplicable = models.BooleanField(default = True,verbose_name='Pf Applicable')
    EsiApplicable = models.BooleanField(default = True,verbose_name='Esic Applicable')
    Uan = models.PositiveIntegerField(null = True,verbose_name='Uan')
    Esic = models.PositiveIntegerField(null = True,verbose_name='Esic')
    AttendenceAward = models.BooleanField(default = True)
    AttendenceAllowance = models.BooleanField(default = True)
    ProfesionalTax = models.BooleanField(default = False)
    Name = models.CharField(max_length=150,verbose_name='Name')
    Father = models.CharField(max_length=150,verbose_name='Father')
    Dob = models.DateField()
    Male = models.BooleanField(default = True)
    Female = models.BooleanField(default = False)
    MaritalStatus = models.BooleanField(default = True)
    Address = models.CharField(max_length=200,verbose_name='Address')
    Aadhar = models.PositiveIntegerField(null=True)
    pan = models.CharField(max_length=10)
    choices = [('Working','WORKING'),('NotWorking','NOT WORKING'),('Leave','Leave')]
    Status = models.CharField(choices=choices,blank = False,max_length=10,verbose_name='Status')
    Doj = models.DateField(default = date.today)
    Doe = models.DateField(blank = True,verbose_name = 'Doe',null = True)

    def __str__(self): 
        return f'{self.Name}({self.EmpId})'

    def save(self):
        super().save()
        empimg = Image.open(self.EmpImage.path)
        empsafetycard = Image.open(self.EmpSafetyCard.path)
        if empimg.height>300 or empimg.width>300:
            output_size = (300,300)
            empimg.thumbnail(output_size)
            empimg.save(self.EmpImage.path)

        if empsafetycard.height>300 or empsafetycard.width>300:
            output_size = (300,300)
            empsafetycard.thumbnail(output_size)
            empsafetycard.save(self.EmpSafetyCard.path)

This is my newEmployeeForm code

class newEmployeeForm(forms.ModelForm):

    class Meta:
        model = EmployeeRegistration
        fields = '__all__'
        labels ={
        'EmpImage':'Upload Employee Image',
        'EmpSafetyCard':'Upload Safety Card',
        'Dob':'Date of Birth',
        'Doj':'Date of Joining',
        'Doe':'Date of Exit'
        }
        widgets = {
        'Dob':DateInput(),
        'Doj': DateInput(),
        'Doe': DateInput()
        }

This is my View for regitering new employee

def registration_view(request,id=0):
    form = newEmployeeForm()
    record = RecordsId.objects.all()
    empid = 0
    for data in record:
        empid = data.EmpId

    emp_id = empid+1
    if(empid!=0 or empid==0):
        get_emp = RecordsId.objects.get(EmpId=empid)

    EmployeeId={"EmpId":emp_id}
    print(request.POST)
    if(request.method == 'POST'):

        if(id==0):
            form = newEmployeeForm(request.POST or None,request.FILES,initial=EmployeeId)
            print("id= 0")
        else:
            print(id)
            employee = EmployeeRegistration.objects.get(pk=id)
            form = newEmployeeForm(instance=employee)
        
        if form.is_valid():
            print("valid")
            get_emp.EmpId = emp_id
            get_emp.save()
            form.save()
            print("saved")
            form = newEmployeeForm(initial=EmployeeId)
            messages.success(request,'Successfully Updated')
            return redirect('emplist') 
        else:
            print("Form is not valid")

    context = {
        'form':form,
        "contact":"active"
    
     }
    return render(request,"employee/NewEmployee.html",context)

I have a view for registering new employee at the same time in the same view i am updating the records of employee. But when i am trying to update the existing record. It is creating new record. i don't know why this is happening. Please help me.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source