I have a function called inside another one. The functions are working properly but, while using a validator to raise some error in case of wrong entries by the users, the validator works but is calling either the success and the error message.
I post some code for better explanation.
utils.py
def add_flight_function(request):
try:
aircraft_maintenance_type = AircraftMaintenanceType.objects.first()
except:
aircraft_maintenance_type = None
aircraft = request.POST.get('aircraft')
adep = request.POST.get('adep')
ades = request.POST.get('ades')
date = request.POST.get('date')
atd = request.POST.get('atd')
ata = request.POST.get('ata')
function_type_obj = request.POST.get('function_type')
function_type_obj = FunctionType.objects.get(id=function_type_obj)
operational_condition = request.POST.get('operational_condition')
student = request.POST.get('student')
instructor = request.POST.get('instructor')
night = request.POST.get('night')
note = request.POST.get('note')
aircraft_type = Aircraft.objects.get(
id=aircraft).aircraft_type.abbreviation
if aircraft_maintenance_type.is_tacho == True:
atd_tacho = request.POST.get('atd_tacho')
ata_tacho = request.POST.get('ata_tacho')
if float(ata_tacho) <= float(atd_tacho):
messages.error(
request, "ATA Tacho cannot be lower than ATD Tacho")
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
is_valid_flight, error_message = flight_validator(
request, ata, atd, function_type_obj.name, instructor)
if not is_valid_flight:
messages.error(request, error_message)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
else:
is_valid_flight, error_message = flight_validator(
request, ata, atd, function_type_obj.name, instructor)
if not is_valid_flight:
messages.error(request, error_message)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
log_entry = LogEntry.objects.create(aircraft_id=aircraft, adep_id=adep, ades_id=ades, date=date, atd=atd,
ata=ata, function_type_id=function_type_obj.id, student_id=student, instructor_id=instructor, operational_condition_id=operational_condition, note=note)
if night == 'on':
log_entry.night_flight = True
# if function_type_obj.name == 'Dual Command':
# instructor_flight_payment = InstructorFlightPayment(log_entry=log_entry, instructor_id=instructor)
# instructor_flight_payment.save()
if function_type_obj.name == 'Single Pilot':
log_entry.solo_flight = True
if aircraft_type == 'SIM':
log_entry.sim_flight = True
elif aircraft_type == 'MEP':
log_entry.mep_flight = True
log_entry.save()
# This Part is for maintenance without Tachometer
if aircraft_maintenance_type is None or aircraft_maintenance_type.is_tacho == False:
ata_obj = parse(ata)
atd_obj = parse(atd)
if (ata_obj - atd_obj) > 10:
maintenance_eet = timedelta(
minutes=(ata_obj-atd_obj)) - timedelta(minutes=10)
else:
maintenance_eet = timedelta(minutes=(ata_obj-atd_obj))
aircraft_flight_time = AircraftFlightTime(
aircraft_id=aircraft, log_entry=log_entry, maintenance_eet=maintenance_eet)
aircraft_flight_time.save()
# This Part is for maintenance With Tachometer
else:
ata_obj = float(ata_tacho)
atd_obj = float(atd_tacho)
maint_eet_obj = (ata_obj - atd_obj) * 60
maintenance_eet = timedelta(minutes=maint_eet_obj)
aircraft_flight_time = AircraftFlightTime(
aircraft_id=aircraft, log_entry=log_entry, maintenance_eet=maintenance_eet, atd_tacho=atd_tacho, ata_tacho=ata_tacho)
aircraft_flight_time.save()
flight_validator:
def flight_validator(request, ata, etd, function_type, instructor):
if ata <= etd:
return False, "ATA cannot be greater or equal to ETD!"
elif function_type == 'Dual Command' and not instructor:
return False, "Instructor must be on Board!"
return True, ""
enter code here
views.py
def add_new_flight(request):
aircrafts = Aircraft.objects.all()
aerodromes = Aerodrome.objects.filter(is_base=False)
base_aerodrome = Aerodrome.objects.get(is_base=True)
function_type = FunctionType.objects.all()
students = Student.objects.filter(is_active=True).order_by('last_name')
instructors = Instructor.objects.filter(
is_active=True).order_by('last_name')
operational_conditions = OperationalCondition.objects.all()
today = dt.today().date()
try:
aircraft_maintenance_type = AircraftMaintenanceType.objects.first()
except:
aircraft_maintenance_type = None
context = {
'aircrafts': aircrafts,
'aerodromes': aerodromes,
'function_type': function_type,
'students': students,
'instructors': instructors,
'today': today,
'operational_conditions': operational_conditions,
'base_aerodrome': base_aerodrome,
'aircraft_maintenance_type': aircraft_maintenance_type,
}
if request.method == 'POST':
try:
add_flight_function(request)
messages.success(request, "New Flight Inserted Successfully")
return HttpResponseRedirect(reverse('flight:flight_list'))
except:
messages.error(request, "Failed to Add New Flight")
return HttpResponseRedirect(reverse('flight:add_new_flight'))
return render(request, 'flight/add_new_flight.html', context)
If I make some input error, the validators are working properly but, for example, are showing both the error and success message. But, in fact, the success message shouldn't be there and actually the function doesn't work and doesn't save anything.