Skip to content

Commit

Permalink
Add validation for charFields and update error messaging
Browse files Browse the repository at this point in the history
  • Loading branch information
CaitBarnard committed Nov 14, 2024
1 parent 0617dcb commit e3522a0
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 10 deletions.
41 changes: 32 additions & 9 deletions payroll/forms.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,33 @@
from django import forms

from payroll.models import Vacancy
from payroll.validators import validate_only_letters_numbers_spaces


class VacancyForm(forms.ModelForm):

appointee_name = forms.CharField(
validators=[
lambda value: validate_only_letters_numbers_spaces(value, "Appointee name")
],
widget=forms.TextInput(attrs={"class": "govuk-input govuk-input--width-20"}),
required=False,
)
hiring_manager = forms.CharField(
validators=[
lambda value: validate_only_letters_numbers_spaces(value, "Hiring manager")
],
widget=forms.TextInput(attrs={"class": "govuk-input govuk-input--width-20"}),
required=False,
)
hr_ref = forms.CharField(
validators=[
lambda value: validate_only_letters_numbers_spaces(value, "HR ref")
],
widget=forms.TextInput(attrs={"class": "govuk-input govuk-input--width-20"}),
required=False,
)

class Meta:
model = Vacancy
fields = "__all__"
Expand All @@ -13,13 +37,12 @@ class Meta:
"grade": forms.Select(attrs={"class": "govuk-select"}),
"recruitment_stage": forms.Select(attrs={"class": "govuk-select"}),
"programme_code": forms.Select(attrs={"class": "govuk-select"}),
"appointee_name": forms.TextInput(
attrs={"class": "govuk-input govuk-input--width-20"}
),
"hiring_manager": forms.TextInput(
attrs={"class": "govuk-input govuk-input--width-20"}
),
"hr_ref": forms.TextInput(
attrs={"class": "govuk-input govuk-input--width-20"}
),
}
error_messages = {
"grade": {
"required": "Grade is a required field.",
},
"programme_code": {
"required": "Programme code is a required field.",
},
}
19 changes: 18 additions & 1 deletion payroll/templates/payroll/page/add_vacancy.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,24 @@
{% block content %}
<h1 class="govuk-heading-l">Create Vacancy</h1>

<form method="post">
{% if form.errors %}
<div class="govuk-error-summary" aria-labelledby="error-summary-title" role="alert" tabindex="-1" data-module="govuk-error-summary">
<h2 class="govuk-error-summary__title" id="error-summary-title">
There is a problem
</h2>
<div class="govuk-error-summary__body">
<ul class="govuk-list govuk-error-summary__list">
{% for field, errors in form.errors.items %}
<li>
<a href="#id_{{ field }}">{{ errors|join:", " }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}

<form method="post" novalidate>
{% csrf_token %}
<div class="govuk-form-group">
{% include "_form_field.html" with field=form.recruitment_type %}
Expand Down
10 changes: 10 additions & 0 deletions payroll/validators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import re

from django.forms import ValidationError


def validate_only_letters_numbers_spaces(value, field):
if not re.match(r"^[a-zA-Z0-9\s]*$", value):
raise ValidationError(
f"{ field } can only contain letters, numbers and spaces."
)

0 comments on commit e3522a0

Please sign in to comment.