diff --git a/django_rq/templates/django_rq/job_detail.html b/django_rq/templates/django_rq/job_detail.html
index aecba236..2f184108 100644
--- a/django_rq/templates/django_rq/job_detail.html
+++ b/django_rq/templates/django_rq/job_detail.html
@@ -52,7 +52,9 @@
diff --git a/django_rq/urls.py b/django_rq/urls.py
index 7fc4601d..e2abcea0 100644
--- a/django_rq/urls.py
+++ b/django_rq/urls.py
@@ -40,4 +40,6 @@
views.requeue_job_view, name='rq_requeue_job'),
re_path(r'^queues/(?P[\d]+)/(?P[-\w\.\:\$]+)/enqueue/$',
views.enqueue_job, name='rq_enqueue_job'),
+ re_path(r'^queues/(?P[\d]+)/(?P[-\w\.\:\$]+)/update_timeout/$',
+ views.update_timeout_job, name='rq_update_timeout_job'),
]
diff --git a/django_rq/views.py b/django_rq/views.py
index 8e13db0e..e91f6a9c 100644
--- a/django_rq/views.py
+++ b/django_rq/views.py
@@ -520,3 +520,28 @@ def enqueue_job(request, queue_index, job_id):
'queue': queue,
}
return render(request, 'django_rq/delete_job.html', context_data)
+
+
+@staff_member_required
+def update_timeout_job(request, queue_index, job_id):
+ """ Update timeout of job by queue settings
+ """
+ queue_index = int(queue_index)
+ queue = get_queue_by_index(queue_index)
+ job = Job.fetch(job_id, connection=queue.connection)
+
+ queue_name = queue.name
+ old_timeout = job.timeout
+
+ from .settings import QUEUES
+ default_timeout = QUEUES[queue_name].get('DEFAULT_TIMEOUT', None)
+ new_timeout = default_timeout
+
+ if old_timeout != new_timeout:
+ job.timeout = new_timeout
+ job.save()
+ messages.success(request, 'You have successfully changed timeout of job from %d to %s' % (old_timeout, new_timeout))
+ else:
+ messages.info(request, 'Job has already default queue timeout')
+
+ return redirect('rq_job_detail', queue_index, job_id)