diff --git a/scheduler/admin/task_models.py b/scheduler/admin/task_models.py index ffc7d07..d358ca5 100644 --- a/scheduler/admin/task_models.py +++ b/scheduler/admin/task_models.py @@ -5,10 +5,19 @@ from scheduler import tools from scheduler.models import CronTask, TaskArg, TaskKwarg, RepeatableTask, ScheduledTask -from scheduler.settings import SCHEDULER_CONFIG, logger +from scheduler.settings import SCHEDULER_CONFIG, logger, QUEUES from scheduler.tools import get_job_executions +def get_queue_choices(): + """ + Returns a list of all queues as choices. + + Loaded from user-defined settings: `RQ_QUEUES` or `SCHEDULER_QUEUES`. + """ + return [(queue, queue) for queue in QUEUES.keys()] + + class HiddenMixin(object): class Media: js = ['admin/js/jquery.init.js', ] @@ -161,3 +170,10 @@ def enqueue_job_now(self, request, queryset): task.enqueue_to_run() task_names.append(task.name) self.message_user(request, f"The following jobs have been enqueued: {', '.join(task_names)}", ) + + def get_form(self, request, obj=None, change=False, **kwargs): + # Override admin form to dynamically set choices for the 'queue' field + # See issue #278: https://github.com/django-commons/django-tasks-scheduler/issues/278 + queue_field = self.model._meta.get_field('queue') + queue_field.choices = get_queue_choices() # Choices based on user-defined settings + return super().get_form(request, obj=obj, change=change, **kwargs)