django form validation error massage not showing. please help me out

55 views
Skip to first unread message

Mohammad Shahidullah

unread,
Sep 15, 2023, 1:38:26 PM9/15/23
to Django users
models.py
class Position(models.Model):
    title = models.CharField(max_length=50)

    def __str__(self):
        return self.title

class Department(models.Model):
    title = models.CharField(max_length=50)

    def __str__(self):
        return self.title


class Employee(models.Model):
    fullname = models.CharField(max_length=100)
    emp_code = models.CharField(max_length=6)
    mobile= models.CharField(max_length=11)
    email = models.EmailField(max_length=25)
    position= models.ForeignKey(Position,on_delete=models.CASCADE)
    Department = models.ForeignKey(Department, on_delete=models.CASCADE)
    password_first = models.CharField(max_length=25)
    password_again = models.CharField(max_length=25)
   
    def __str__ (self):
        return self.fullname

forms.py
User = get_user_model()

class EmployeeForm(forms.ModelForm):

    class Meta:
        model = Employee
        fields = ('fullname','mobile','emp_code','position', 'Department','email', 'password_first', 'password_again')
        labels = {
            'fullname':'Full Name',
            'emp_code':'Employee Code',
            'password_first': 'Password',
            'password_again': 'Confirm Password',
        }

        widgets = {
            'password_first': forms.PasswordInput(),
            'password_again' : forms.PasswordInput(),
        }


    def __init__(self, *args, **kwargs):
        super(EmployeeForm,self).__init__(*args, **kwargs)
        self.fields['position'].empty_label = "Select"
        self.fields['Department'].empty_label = "Select"
   


    def clean_username(self):
        username = self.cleaned_data.get('emp_code')
        qs = User.objects.filter(username=username)
        if qs.exists():
            raise forms.ValidationError('username already exists')
        return username
   
    def clean(self):
        cleaned_data = self.cleaned_data
        password_first = self.cleaned_data.get('password_first')
        password_again = self.cleaned_data.get('password_again')
        if password_first and password_again and password_first != password_again:
            raise forms.ValidationError("Passwords din't match")
        return cleaned_data
   
    def clean_email(self):
        email_address = self.cleaned_data.get('email')
        qs = User.objects.filter(email=email_address)
        if qs.exists():
            raise forms.ValidationError("This email_id already registered")
        return email_address

views.py
def employee_form(request, id=0):
    if request.method == "GET":
        if id == 0:
            form = EmployeeForm()
        else:
            employee = Employee.objects.get(pk=id)
            form = EmployeeForm(instance=employee)
        return render(request, "users/employee_form.html", {'form': form})
    else:
        if id == 0:
            form = EmployeeForm(request.POST)
        else:
            employee = Employee.objects.get(pk=id)
            form = EmployeeForm(request.POST,instance= employee)
        if form.is_valid():
            form.save()
        return redirect('/list')


employee_form.html


{% block content %}
<div class="form-group">
<form action="" method="post" autocomplete="off">
    {% csrf_token %}
    {{form.fullname|as_crispy_field}}
    {{form.mobile|as_crispy_field}}
    {{form.email|as_crispy_field}}
   
    <div class="row">
        <div class="col-md-4">
            {{form.emp_code|as_crispy_field}}
        </div>
        <div class="col-md-4">
            {{form.position|as_crispy_field}}
        </div>
        <div class="col-md-4">
            {{form.Department|as_crispy_field}}
        </div>
    </div>

    <div class="row">
        <div class="col-md-6"  >
            {{form.password_first|as_crispy_field}}
        </div>
        <div class="col-md-6" >
            {{form.password_again|as_crispy_field}}
        </div>
    </div>

    <br><br><br>
    <div class="row">
        <div class="col-md-8">
            <button type="submit" class="btn btn-success btn-block btn-lg"><i class="fas fa-database"></i>
                Submit</button>
        </div>
        <div class="col-md-4">
            <a href="{% url 'employee_list' %}" class="btn btn-secondary btn-block btn-lg">
                <i class="fas fa-stream"></i> Back to list
            </a>
        </div>
    </div>

</form>
{% if form.error %}
        {% for field in form %}
            {% for error in field.error %}
                <p> {{ errors }} </p>
            {% endfor %}
        {% endfor %}
       
        {% for error in form.non_field_error %}
        <p> {{ error }} </p>
        {% endfor %}
{% endif %}
</div>



{% endblock content %}



Reply all
Reply to author
Forward
0 new messages