Вложенная функция работает, но возвращает сообщения в Django

У меня есть функция, вызываемая внутри другой функции. Функции работают правильно, но при использовании валидатора, чтобы выдать ошибку в случае неправильного ввода пользователем, валидатор работает, но вызывает либо сообщение об успехе, либо об ошибке.

Я размещаю некоторый код для лучшего объяснения.

utils.py

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)

Если я делаю какую-то ошибку ввода, валидаторы работают правильно, но, например, показывают и ошибку, и сообщение об успехе. Но, на самом деле, сообщения об успехе не должно быть, и функция не работает и ничего не сохраняет.

Я думаю, что в вашей функции add_flight_function вы хотите вызвать какую-то ошибку, чтобы поток кода перешел к блоку except. Сейчас вы возвращаете экземпляр ответа, который не используется в вашем представлении, и код просто переходит к следующим строкам, которые добавляют сообщение об успехе и возвращают перенаправление (блок try).

Так что исправление будет заключаться в том, чтобы делать это везде, где вы возвращаете HttpResponseRedirect в add_flight_function:

messages.error(request, error_message)
raise ValidationError(error_message)
# return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

Примечание: было бы лучше, если бы вы использовали формы Django для всего этого.

Вернуться на верх