diff --git a/docs/changelog.md b/docs/changelog.md index c4bc542..3e6b719 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,11 @@ # Changelog +## v1.3.5 🌈 + +### Bug Fixes + +- Fixes issue where admin queue choices were hardcoded by loading them dynamically from user-defined settings like `settings.SCHEDULER_QUEUES`. @DhavalGojiya #278 + ## v1.3.4 🌈 ### 🧰 Maintenance diff --git a/pyproject.toml b/pyproject.toml index 544389e..99ab44b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "django-tasks-scheduler" packages = [ { include = "scheduler" }, ] -version = "1.3.4" +version = "1.3.5" description = "An async job scheduler for django using redis" readme = "README.md" keywords = ["redis", "django", "background-jobs", "job-queue", "task-queue", "redis-queue", "scheduled-jobs"] 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)