New Upstream Release - python-django-celery-beat

Ready changes

Summary

Merged new upstream version: 2.5.0 (was: 2.4.0).

Diff

diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index 65c36bb..661d620 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 2.4.0
+current_version = 2.5.0
 commit = True
 tag = True
 parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?P<releaselevel>[a-z]+)?
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index f8c5f66..03933bc 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -2,9 +2,9 @@ name: CI
 
 on:
   push:
-    branches: [ master ]
+    branches: [ main ]
   pull_request:
-    branches: [ master ]
+    branches: [ main ]
 
 jobs:
   build:
@@ -12,7 +12,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ['3.7', '3.8', '3.9', '3.10', 'pypy-3.9']
+        python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', 'pypy-3.9']
 
     services:
       rabbitmq:
diff --git a/.github/workflows/tidelift.yml b/.github/workflows/tidelift.yml
deleted file mode 100644
index d62a8a7..0000000
--- a/.github/workflows/tidelift.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: Tidelift Alignment
-on:
-  schedule:
-    - cron: "30 2 * * *"  # daily at 02:30 UTC
-  push:
-    paths:
-      - ".github/workflows/tidelift.yml"
-
-  workflow_dispatch:
-
-jobs:
-  build:
-    if: github.repository_owner == 'celery'
-    name: Ensure approved open source packages are in use
-    runs-on: ubuntu-latest
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-      - name: Scan
-        uses: tidelift/alignment-action@main
-        env:
-          TIDELIFT_API_KEY: ${{ secrets.TIDELIFT_API_KEY }}
-          TIDELIFT_ORGANIZATION: team/auvipy
-          TIDELIFT_PROJECT: celeryproject
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b07fb49..e8111b6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,13 +3,13 @@ exclude: "migrations"
 
 repos:
   - repo: https://github.com/asottile/pyupgrade
-    rev: v3.1.0
+    rev: v3.3.1
     hooks:
       - id: pyupgrade
         args: ["--py37-plus"]
 
   - repo: https://github.com/PyCQA/flake8
-    rev: 5.0.4
+    rev: 6.0.0
     hooks:
       - id: flake8
 
@@ -19,7 +19,7 @@ repos:
       - id: yesqa
 
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.3.0
+    rev: v4.4.0
     hooks:
       - id: check-merge-conflict
       - id: check-toml
@@ -27,6 +27,6 @@ repos:
       - id: mixed-line-ending
 
   - repo: https://github.com/pycqa/isort
-    rev: 5.10.1
+    rev: 5.12.0
     hooks:
       - id: isort
diff --git a/Changelog b/Changelog
index 0d3abcb..cfcdfb3 100644
--- a/Changelog
+++ b/Changelog
@@ -4,6 +4,20 @@
  Change history
 ================
 
+.. _version-2.5.0:
+
+2.5.0
+=====
+:release-date: 2023-03-14 4:00 p.m. UTC+6:00
+:release-by: Asif Saif Uddin
+
+- Prefetch_related on PeriodicTaskQuerySet.enabled (#608).
+- Clarify month range (#615).
+- Declare support for Django 4.2 & Python 3.11.
+- Adding human readable descriptions of crontab schedules (#622).
+- Start time heap block fix (#636).
+
+
 .. _version-2.4.0:
 
 2.4.0
diff --git a/README.rst b/README.rst
index b2e14ab..f1e9f3b 100644
--- a/README.rst
+++ b/README.rst
@@ -4,7 +4,7 @@
 
 |build-status| |coverage| |license| |wheel| |pyversion| |pyimp|
 
-:Version: 2.4.0
+:Version: 2.5.0
 :Web: http://django-celery-beat.readthedocs.io/
 :Download: http://pypi.python.org/pypi/django-celery-beat
 :Source: http://github.com/celery/django-celery-beat
diff --git a/debian/changelog b/debian/changelog
index d6ba37f..f8eb6ab 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+python-django-celery-beat (2.5.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 08 Apr 2023 03:42:55 -0000
+
 python-django-celery-beat (2.4.0-1) unstable; urgency=low
 
   * New upstream release.
diff --git a/debian/patches/0001-Use-local-objects.inv-in-intersphinx-mapping.patch b/debian/patches/0001-Use-local-objects.inv-in-intersphinx-mapping.patch
index 0f791c1..8786c9f 100644
--- a/debian/patches/0001-Use-local-objects.inv-in-intersphinx-mapping.patch
+++ b/debian/patches/0001-Use-local-objects.inv-in-intersphinx-mapping.patch
@@ -6,10 +6,10 @@ Subject: Use local objects.inv in intersphinx mapping.
  docs/conf.py | 47 ++++++++++++++++++++++++++++++++++++++++-------
  1 file changed, 40 insertions(+), 7 deletions(-)
 
-diff --git a/docs/conf.py b/docs/conf.py
-index 29e8031..9cd570b 100644
---- a/docs/conf.py
-+++ b/docs/conf.py
+Index: python-django-celery-beat.git/docs/conf.py
+===================================================================
+--- python-django-celery-beat.git.orig/docs/conf.py
++++ python-django-celery-beat.git/docs/conf.py
 @@ -1,7 +1,46 @@
  import os
 +import sys
diff --git a/debian/patches/0002-Drop-requirement-on-tzdata.patch b/debian/patches/0002-Drop-requirement-on-tzdata.patch
index 00debe7..0628258 100644
--- a/debian/patches/0002-Drop-requirement-on-tzdata.patch
+++ b/debian/patches/0002-Drop-requirement-on-tzdata.patch
@@ -12,13 +12,14 @@ Signed-off-by: Mattia Rizzolo <mattia@debian.org>
  requirements/default.txt | 1 -
  1 file changed, 1 deletion(-)
 
-diff --git a/requirements/default.txt b/requirements/default.txt
-index 3374e92..889d9db 100644
---- a/requirements/default.txt
-+++ b/requirements/default.txt
-@@ -2,5 +2,4 @@ celery>=5.2.3,<6.0
+Index: python-django-celery-beat.git/requirements/default.txt
+===================================================================
+--- python-django-celery-beat.git.orig/requirements/default.txt
++++ python-django-celery-beat.git/requirements/default.txt
+@@ -2,6 +2,5 @@ celery>=5.2.3,<6.0
  importlib-metadata<5.0; python_version<"3.8" # TODO: remove this when celery >= 5.3.0
  django-timezone-field>=5.0
  backports.zoneinfo; python_version<"3.9"
 -tzdata
  python-crontab>=2.3.4
+ cron-descriptor>=1.2.32
diff --git a/django_celery_beat/__init__.py b/django_celery_beat/__init__.py
index 6f2b62d..c118085 100644
--- a/django_celery_beat/__init__.py
+++ b/django_celery_beat/__init__.py
@@ -7,7 +7,7 @@ from collections import namedtuple
 
 import django
 
-__version__ = '2.4.0'
+__version__ = '2.5.0'
 __author__ = 'Asif Saif Uddin, Ask Solem'
 __contact__ = 'auvipy@gmail.com, ask@celeryproject.org'
 __homepage__ = 'https://github.com/celery/django-celery-beat'
diff --git a/django_celery_beat/admin.py b/django_celery_beat/admin.py
index d43e671..0ba8a12 100644
--- a/django_celery_beat/admin.py
+++ b/django_celery_beat/admin.py
@@ -112,7 +112,7 @@ class PeriodicTaskAdmin(admin.ModelAdmin):
     model = PeriodicTask
     celery_app = current_app
     date_hierarchy = 'start_time'
-    list_display = ('__str__', 'enabled', 'interval', 'start_time',
+    list_display = ('name', 'enabled', 'scheduler', 'interval', 'start_time',
                     'last_run_at', 'one_off')
     list_filter = ['enabled', 'one_off', 'task', 'start_time', 'last_run_at']
     actions = ('enable_tasks', 'disable_tasks', 'toggle_tasks', 'run_tasks')
@@ -123,8 +123,8 @@ class PeriodicTaskAdmin(admin.ModelAdmin):
             'classes': ('extrapretty', 'wide'),
         }),
         (_('Schedule'), {
-            'fields': ('interval', 'crontab', 'solar', 'clocked',
-                       'start_time', 'last_run_at', 'one_off'),
+            'fields': ('interval', 'crontab', 'crontab_translation', 'solar',
+                       'clocked', 'start_time', 'last_run_at', 'one_off'),
             'classes': ('extrapretty', 'wide'),
         }),
         (_('Arguments'), {
@@ -138,12 +138,28 @@ class PeriodicTaskAdmin(admin.ModelAdmin):
         }),
     )
     readonly_fields = (
-        'last_run_at',
+        'last_run_at', 'crontab_translation',
     )
 
+    def crontab_translation(self, obj):
+        return obj.crontab.human_readable
+
+    change_form_template = 'admin/djcelery/change_periodictask_form.html'
+
+    def changeform_view(self, request, object_id=None, form_url='',
+                        extra_context=None):
+        extra_context = extra_context or {}
+        crontabs = CrontabSchedule.objects.all()
+        crontab_dict = {}
+        for crontab in crontabs:
+            crontab_dict[crontab.id] = crontab.human_readable
+        extra_context['readable_crontabs'] = crontab_dict
+        return super().changeform_view(request, object_id,
+                                       extra_context=extra_context)
+
     def changelist_view(self, request, extra_context=None):
         extra_context = extra_context or {}
-        scheduler = getattr(settings, 'CELERYBEAT_SCHEDULER', None)
+        scheduler = getattr(settings, 'CELERY_BEAT_SCHEDULER', None)
         extra_context['wrong_scheduler'] = not is_database_scheduler(scheduler)
         return super().changelist_view(
             request, extra_context)
@@ -247,8 +263,12 @@ class ClockedScheduleAdmin(admin.ModelAdmin):
     )
 
 
+class CrontabScheduleAdmin(admin.ModelAdmin):
+    list_display = ('__str__', 'human_readable')
+
+
 admin.site.register(IntervalSchedule)
-admin.site.register(CrontabSchedule)
+admin.site.register(CrontabSchedule, CrontabScheduleAdmin)
 admin.site.register(SolarSchedule)
 admin.site.register(ClockedSchedule, ClockedScheduleAdmin)
 admin.site.register(PeriodicTask, PeriodicTaskAdmin)
diff --git a/django_celery_beat/locale/de/LC_MESSAGES/django.mo b/django_celery_beat/locale/de/LC_MESSAGES/django.mo
index 87ea8bd..7e6b1d9 100644
Binary files a/django_celery_beat/locale/de/LC_MESSAGES/django.mo and b/django_celery_beat/locale/de/LC_MESSAGES/django.mo differ
diff --git a/django_celery_beat/locale/de/LC_MESSAGES/django.po b/django_celery_beat/locale/de/LC_MESSAGES/django.po
index 8ea78c7..3427ba5 100644
--- a/django_celery_beat/locale/de/LC_MESSAGES/django.po
+++ b/django_celery_beat/locale/de/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-08-28 01:05+0000\n"
+"POT-Creation-Date: 2022-12-22 18:56+0000\n"
 "PO-Revision-Date: 2022-08-28 03:29+0200\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -18,316 +18,326 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 3.1.1\n"
 
-#: admin.py:60
+#: django_celery_beat/admin.py:60
 msgid "Task (registered)"
 msgstr "Aufgabe (registriert)"
 
-#: admin.py:64
+#: django_celery_beat/admin.py:64
 msgid "Task (custom)"
 msgstr "Aufgabe (benutzerdefiniert)"
 
-#: admin.py:81
+#: django_celery_beat/admin.py:81
 msgid "Need name of task"
 msgstr "Name der Aufgabe benötigt"
 
-#: admin.py:87 models.py:593
+#: django_celery_beat/admin.py:87 django_celery_beat/models.py:605
 msgid "Only one can be set, in expires and expire_seconds"
 msgstr ""
 "Es kann nur eine festgelegt werden, \"Ablaufdatum\" oder \"Ablauf-Timedelta "
 "in Sekunden\""
 
-#: admin.py:97
+#: django_celery_beat/admin.py:97
 #, python-format
 msgid "Unable to parse JSON: %s"
 msgstr "Ausserstande JSON zu parsen: %s"
 
-#: admin.py:125
+#: django_celery_beat/admin.py:125
 msgid "Schedule"
 msgstr "Zeitplan"
 
-#: admin.py:130
+#: django_celery_beat/admin.py:130
 msgid "Arguments"
 msgstr "Argumente"
 
-#: admin.py:134
+#: django_celery_beat/admin.py:134
 msgid "Execution Options"
 msgstr "Ausführungsoptionen"
 
-#: admin.py:163
+#: django_celery_beat/admin.py:177
 #, python-brace-format
 msgid "{0} task{1} {2} successfully {3}"
 msgstr "{0} Aufgabe{1} {2} erfolgreich {3}"
 
-#: admin.py:166 admin.py:233
+#: django_celery_beat/admin.py:180 django_celery_beat/admin.py:247
 msgid "was,were"
 msgstr "war,waren"
 
-#: admin.py:175
+#: django_celery_beat/admin.py:189
 msgid "Enable selected tasks"
 msgstr "Ausgewählte Aufgaben aktivieren"
 
-#: admin.py:181
+#: django_celery_beat/admin.py:195
 msgid "Disable selected tasks"
 msgstr "Ausgewählte Aufgaben deaktivieren"
 
-#: admin.py:193
+#: django_celery_beat/admin.py:207
 msgid "Toggle activity of selected tasks"
 msgstr "Aktivität ausgewählter Aufgaben ein-/ausschalten"
 
-#: admin.py:214
-#, python-brace-format
-msgid "task \"{0}\" not found"
+#: django_celery_beat/admin.py:228
+#, fuzzy, python-brace-format
+#| msgid "task \"{0}\" not found"
+msgid "task \"{not_found_task_name}\" not found"
 msgstr "Aufgabe \"{0}\" nicht gefunden"
 
-#: admin.py:230
+#: django_celery_beat/admin.py:244
 #, python-brace-format
 msgid "{0} task{1} {2} successfully run"
 msgstr "{0} Aufgabe{1} {2} erfolgreich ausgeführt"
 
-#: admin.py:236
+#: django_celery_beat/admin.py:250
 msgid "Run selected tasks"
 msgstr "Ausgewählte Aufgaben ausführen"
 
-#: apps.py:13
+#: django_celery_beat/apps.py:13
 msgid "Periodic Tasks"
 msgstr "Periodische Aufgaben"
 
-#: models.py:30
+#: django_celery_beat/models.py:30
 msgid "Days"
 msgstr "Tage"
 
-#: models.py:31
+#: django_celery_beat/models.py:31
 msgid "Hours"
 msgstr "Stunden"
 
-#: models.py:32
+#: django_celery_beat/models.py:32
 msgid "Minutes"
 msgstr "Minuten"
 
-#: models.py:33
+#: django_celery_beat/models.py:33
 msgid "Seconds"
 msgstr "Sekunden"
 
-#: models.py:34
+#: django_celery_beat/models.py:34
 msgid "Microseconds"
 msgstr "Mikrosekunden"
 
-#: models.py:38
+#: django_celery_beat/models.py:38
 msgid "Day"
 msgstr "Tag"
 
-#: models.py:39
+#: django_celery_beat/models.py:39
 msgid "Hour"
 msgstr "Stunde"
 
-#: models.py:40
+#: django_celery_beat/models.py:40
 msgid "Minute"
 msgstr "Minute"
 
-#: models.py:41
+#: django_celery_beat/models.py:41
 msgid "Second"
 msgstr "Sekunde"
 
-#: models.py:42
+#: django_celery_beat/models.py:42
 msgid "Microsecond"
 msgstr "Mikrosekunde"
 
-#: models.py:46
+#: django_celery_beat/models.py:46
 msgid "Astronomical dawn"
 msgstr "Astronomische Morgendämmerung"
 
-#: models.py:47
+#: django_celery_beat/models.py:47
 msgid "Civil dawn"
 msgstr "Zivile Morgendämmerung"
 
-#: models.py:48
+#: django_celery_beat/models.py:48
 msgid "Nautical dawn"
 msgstr "Nautische Morgendämmerung"
 
-#: models.py:49
+#: django_celery_beat/models.py:49
 msgid "Astronomical dusk"
 msgstr "Astronomische Dämmerung"
 
-#: models.py:50
+#: django_celery_beat/models.py:50
 msgid "Civil dusk"
 msgstr "Zivile Dämmerung"
 
-#: models.py:51
+#: django_celery_beat/models.py:51
 msgid "Nautical dusk"
 msgstr "Nautische Dämmerung"
 
-#: models.py:52
+#: django_celery_beat/models.py:52
 msgid "Solar noon"
 msgstr "Sonnenmittag"
 
-#: models.py:53
+#: django_celery_beat/models.py:53
 msgid "Sunrise"
 msgstr "Sonnenaufgang"
 
-#: models.py:54
+#: django_celery_beat/models.py:54
 msgid "Sunset"
 msgstr "Sonnenuntergang"
 
-#: models.py:88
+#: django_celery_beat/models.py:88
 msgid "Solar Event"
 msgstr "Sonnenereigniss"
 
-#: models.py:89
+#: django_celery_beat/models.py:89
 msgid "The type of solar event when the job should run"
 msgstr "Die Art des Solarereignisses, wenn die Aufgabe ausgeführt werden soll"
 
-#: models.py:93
+#: django_celery_beat/models.py:93
 msgid "Latitude"
 msgstr "Breitengrad"
 
-#: models.py:94
+#: django_celery_beat/models.py:94
 msgid "Run the task when the event happens at this latitude"
 msgstr ""
 "Führen Sie diese Aufgabe aus, wenn das Ereignis in diesem Breitengrad "
 "auftritt"
 
-#: models.py:99
+#: django_celery_beat/models.py:99
 msgid "Longitude"
 msgstr "Längengrad"
 
-#: models.py:100
+#: django_celery_beat/models.py:100
 msgid "Run the task when the event happens at this longitude"
 msgstr ""
 "Führen Sie diese Aufgabe aus, wenn das Ereignis in diesem Längengrad auftritt"
 
-#: models.py:107
+#: django_celery_beat/models.py:107
 msgid "solar event"
 msgstr "Sonnenereigniss"
 
-#: models.py:108
+#: django_celery_beat/models.py:108
 msgid "solar events"
 msgstr "Sonnenereignisse"
 
-#: models.py:158
+#: django_celery_beat/models.py:158
 msgid "Number of Periods"
 msgstr "Anzahl der Perioden"
 
-#: models.py:159
+#: django_celery_beat/models.py:159
 msgid "Number of interval periods to wait before running the task again"
 msgstr ""
 "Anzahl der Intervallperioden, die gewartet werden sollen, bevor der Task "
 "erneut ausgeführt wird"
 
-#: models.py:165
+#: django_celery_beat/models.py:165
 msgid "Interval Period"
 msgstr "Intervallperiode"
 
-#: models.py:166
+#: django_celery_beat/models.py:166
 msgid "The type of period between task runs (Example: days)"
 msgstr "Der Typ des Zeitraums zwischen den Taskläufen (Beispiel: Tage)"
 
-#: models.py:172
+#: django_celery_beat/models.py:172
 msgid "interval"
 msgstr "Intervall"
 
-#: models.py:173
+#: django_celery_beat/models.py:173
 msgid "intervals"
 msgstr "Intervalle"
 
-#: models.py:200
+#: django_celery_beat/models.py:200
 msgid "every {}"
 msgstr "jede {}"
 
-#: models.py:205
+#: django_celery_beat/models.py:205
 msgid "every {} {}"
 msgstr "jede {} {}"
 
-#: models.py:216
+#: django_celery_beat/models.py:216
 msgid "Clock Time"
 msgstr "Uhrzeit"
 
-#: models.py:217
+#: django_celery_beat/models.py:217
 msgid "Run the task at clocked time"
 msgstr "Die Aufgabe zur Uhrzeit ausführen"
 
-#: models.py:223 models.py:224
+#: django_celery_beat/models.py:223 django_celery_beat/models.py:224
 msgid "clocked"
 msgstr "Getaktet"
 
-#: models.py:264
+#: django_celery_beat/models.py:264
 msgid "Minute(s)"
 msgstr "Minute(n)"
 
-#: models.py:266
+#: django_celery_beat/models.py:266
 msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")"
 msgstr ""
 "Cron Minuten zur Ausführung. Verwenden Sie \"*\" für \"alle\". (Beispiel: "
 "\"0,30\")"
 
-#: models.py:271
+#: django_celery_beat/models.py:271
 msgid "Hour(s)"
 msgstr "Stunde(n)"
 
-#: models.py:273
+#: django_celery_beat/models.py:273
 msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")"
 msgstr ""
 "Cron Stunden zur Ausführung. Verwenden Sie \"*\" für \"alle\". (Beispiel: "
 "„8,20“)"
 
-#: models.py:278
+#: django_celery_beat/models.py:278
 msgid "Day(s) Of The Week"
 msgstr "Tag(e) der Woche"
 
-#: models.py:280
-msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+#: django_celery_beat/models.py:280
+#, fuzzy
+#| msgid ""
+#| "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+msgid ""
+"Cron Days Of The Week to Run. Use \"*\" for \"all\", Sunday is 0 or 7, "
+"Monday is 1. (Example: \"0,5\")"
 msgstr ""
-"Cron Tage der Woche zur Ausführung. Verwenden Sie \"*\" für \"alle\". "
-"(Beispiel: \"0,5\")"
+"Cron Tage der Woche zur Ausführung. Verwenden Sie \"*\" für \"alle\", Sonntag ist 0 oder 7, "
+"Montag ist 1. (Beispiel: \"0,5\")"
 
-#: models.py:286
+#: django_celery_beat/models.py:286
 msgid "Day(s) Of The Month"
 msgstr "Tag(e) des Monats"
 
-#: models.py:288
+#: django_celery_beat/models.py:288
 msgid ""
 "Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")"
 msgstr ""
 "Cron Tage des Monats zur Ausführung. Verwenden Sie \"*\" für \"alle\". "
 "(Beispiel: \"1,15\")"
 
-#: models.py:294
+#: django_celery_beat/models.py:294
 msgid "Month(s) Of The Year"
 msgstr "Monat(e) des Jahres"
 
-#: models.py:296
+#: django_celery_beat/models.py:296
+#, fuzzy
+#| msgid ""
+#| "Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
 msgid ""
-"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
+"Cron Months (1-12) Of The Year to Run. Use \"*\" for \"all\". (Example: "
+"\"1,12\")"
 msgstr ""
 "Cron Monate des Jahres zur Ausführung. Verwenden Sie \"*\" für \"alle\". "
 "(Beispiel: \"0,6\")"
 
-#: models.py:304
+#: django_celery_beat/models.py:304
 msgid "Cron Timezone"
 msgstr "Cron Zeitzone"
 
-#: models.py:306
+#: django_celery_beat/models.py:306
 msgid "Timezone to Run the Cron Schedule on. Default is UTC."
 msgstr ""
 "Zeitzone, in der der Cron-Zeitplan ausgeführt werden soll. Der Standardwert "
 "ist UTC."
 
-#: models.py:312
+#: django_celery_beat/models.py:312
 msgid "crontab"
 msgstr "Crontab"
 
-#: models.py:313
+#: django_celery_beat/models.py:313
 msgid "crontabs"
 msgstr "Crontabs"
 
-#: models.py:397
+#: django_celery_beat/models.py:404
 msgid "Name"
 msgstr "Name"
 
-#: models.py:398
+#: django_celery_beat/models.py:405
 msgid "Short Description For This Task"
 msgstr "Kurzbeschreibung für diese Aufgabe"
 
-#: models.py:403
+#: django_celery_beat/models.py:410
 msgid ""
 "The Name of the Celery Task that Should be Run.  (Example: \"proj.tasks."
 "import_contacts\")"
@@ -335,11 +345,11 @@ msgstr ""
 "Der Name des Celery-Tasks, der ausgeführt werden soll. (Beispiel: \"proj."
 "tasks.import_contacts\")"
 
-#: models.py:411
+#: django_celery_beat/models.py:418
 msgid "Interval Schedule"
 msgstr "Intervall-Zeitplan"
 
-#: models.py:412
+#: django_celery_beat/models.py:419
 msgid ""
 "Interval Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -347,11 +357,11 @@ msgstr ""
 "Intervallzeitplan zum Ausführen der Aufgabe. Legen Sie nur einen Zeitplantyp "
 "fest und lassen Sie die anderen null."
 
-#: models.py:417
+#: django_celery_beat/models.py:424
 msgid "Crontab Schedule"
 msgstr "Crontab-Zeitplan"
 
-#: models.py:418
+#: django_celery_beat/models.py:425
 msgid ""
 "Crontab Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -359,11 +369,11 @@ msgstr ""
 "Crontab Zeitplan zum Ausführen der Aufgabe. Legen Sie nur einen Zeitplantyp "
 "fest und lassen Sie die anderen null."
 
-#: models.py:423
+#: django_celery_beat/models.py:430
 msgid "Solar Schedule"
 msgstr "Solar-Zeitplan"
 
-#: models.py:424
+#: django_celery_beat/models.py:431
 msgid ""
 "Solar Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -371,11 +381,11 @@ msgstr ""
 "Solarzeitplan, um die Aufgabe auszuführen. Legen Sie nur einen Zeitplantyp "
 "fest und lassen Sie die anderen auf null."
 
-#: models.py:429
+#: django_celery_beat/models.py:436
 msgid "Clocked Schedule"
 msgstr "Getakteter-Zeitplan"
 
-#: models.py:430
+#: django_celery_beat/models.py:437
 msgid ""
 "Clocked Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -383,62 +393,62 @@ msgstr ""
 "Getakteter Zeitplan zum Ausführen der Aufgabe. Legen Sie nur einen "
 "Zeitplantyp fest und lassen Sie die anderen null."
 
-#: models.py:436
+#: django_celery_beat/models.py:443
 msgid "Positional Arguments"
 msgstr "Positionsargumente"
 
-#: models.py:438
+#: django_celery_beat/models.py:445
 msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])"
 msgstr "JSON-Codierte Positionsargumente (Beispiel: [\"arg1\", \"arg2\"])"
 
-#: models.py:443
+#: django_celery_beat/models.py:450
 msgid "Keyword Arguments"
 msgstr "Schlüsselwort-Argumente"
 
-#: models.py:445
+#: django_celery_beat/models.py:452
 msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})"
 msgstr ""
 "JSON-Codierte Schlüsselwortargumente (Beispiel: {\"argument\": \"wert\"})"
 
-#: models.py:451
+#: django_celery_beat/models.py:458
 msgid "Queue Override"
 msgstr "Warteschlangenüberschreibung"
 
-#: models.py:453
+#: django_celery_beat/models.py:460
 msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing."
 msgstr ""
 "In CELERY_TASK_QUEUES definierte Warteschlange. Auf None lassen, für die "
 "Standardwarteschlange."
 
-#: models.py:462
+#: django_celery_beat/models.py:469
 msgid "Exchange"
 msgstr "Exchange"
 
-#: models.py:463
+#: django_celery_beat/models.py:470
 msgid "Override Exchange for low-level AMQP routing"
 msgstr "Override Exchange für Low-Level-AMQP-Routing"
 
-#: models.py:467
+#: django_celery_beat/models.py:474
 msgid "Routing Key"
 msgstr "Routing-Schlüssel"
 
-#: models.py:468
+#: django_celery_beat/models.py:475
 msgid "Override Routing Key for low-level AMQP routing"
 msgstr "Override Routing Key für Low-Level-AMQP-Routing"
 
-#: models.py:472
+#: django_celery_beat/models.py:479
 msgid "AMQP Message Headers"
 msgstr "AMQP-Nachrichtenheader"
 
-#: models.py:473
+#: django_celery_beat/models.py:480
 msgid "JSON encoded message headers for the AMQP message."
 msgstr "JSON-Codierte Nachrichtenheader für die AMQP-Nachricht."
 
-#: models.py:479
+#: django_celery_beat/models.py:486
 msgid "Priority"
 msgstr "Priorität"
 
-#: models.py:481
+#: django_celery_beat/models.py:488
 msgid ""
 "Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority "
 "reversed, 0 is highest)."
@@ -446,22 +456,22 @@ msgstr ""
 "Prioritätsnummer zwischen 0 und 255. Unterstützt von: RabbitMQ, Redis "
 "(Priorität umgekehrt, 0 ist am höchsten)."
 
-#: models.py:486
+#: django_celery_beat/models.py:493
 msgid "Expires Datetime"
 msgstr "Ablaufdatum"
 
-#: models.py:488
+#: django_celery_beat/models.py:495
 msgid ""
 "Datetime after which the schedule will no longer trigger the task to run"
 msgstr ""
 "Zeitpunkt, nach dem der Zeitplan die Ausführung die Aufgabe nicht mehr "
 "auslöst"
 
-#: models.py:493
+#: django_celery_beat/models.py:500
 msgid "Expires timedelta with seconds"
 msgstr "Ablauf-Timedelta in Sekunden"
 
-#: models.py:495
+#: django_celery_beat/models.py:502
 msgid ""
 "Timedelta with seconds which the schedule will no longer trigger the task to "
 "run"
@@ -469,37 +479,37 @@ msgstr ""
 "Timedelta in Sekunden, die der Zeitplan nicht mehr auslöst, um die Aufgabe "
 "auszuführen"
 
-#: models.py:501
+#: django_celery_beat/models.py:508
 msgid "One-off Task"
 msgstr "Einmalige Aufgabe"
 
-#: models.py:503
+#: django_celery_beat/models.py:510
 msgid "If True, the schedule will only run the task a single time"
 msgstr "Wenn aktiv, wird die Aufgabe im Zeitplan nur einmal ausgeführt"
 
-#: models.py:507
+#: django_celery_beat/models.py:514
 msgid "Start Datetime"
 msgstr "Start-Datum"
 
-#: models.py:509
+#: django_celery_beat/models.py:516
 msgid "Datetime when the schedule should begin triggering the task to run"
 msgstr ""
 "Zeitpunkt, zu der der Zeitplan beginnen soll, die Ausführung der Aufgabe "
 "auszulösen"
 
-#: models.py:514
+#: django_celery_beat/models.py:521
 msgid "Enabled"
 msgstr "Aktiviert"
 
-#: models.py:515
+#: django_celery_beat/models.py:522
 msgid "Set to False to disable the schedule"
 msgstr "Deaktivieren zum deaktivieren -_-"
 
-#: models.py:520
+#: django_celery_beat/models.py:527
 msgid "Last Run Datetime"
 msgstr "Uhrzeit der letzten Ausführung"
 
-#: models.py:522
+#: django_celery_beat/models.py:529
 msgid ""
 "Datetime that the schedule last triggered the task to run. Reset to None if "
 "enabled is set to False."
@@ -507,38 +517,38 @@ msgstr ""
 "Uhrzeit, zu der der letzte Zeitplan die Ausführung die Aufgabe ausgelöst "
 "hat. Setzt auf Keine zurück, wenn \"Aktiviert\" ist auf False gesetzt wird."
 
-#: models.py:527
+#: django_celery_beat/models.py:534
 msgid "Total Run Count"
 msgstr "Gesamtzahl der Durchgänge"
 
-#: models.py:529
+#: django_celery_beat/models.py:536
 msgid "Running count of how many times the schedule has triggered the task"
 msgstr "Laufende Zählung, wie oft der Zeitplan die Aufgabe ausgelöst hat"
 
-#: models.py:534
+#: django_celery_beat/models.py:541
 msgid "Last Modified"
 msgstr "Zuletzt geändert"
 
-#: models.py:535
+#: django_celery_beat/models.py:542
 msgid "Datetime that this PeriodicTask was last modified"
 msgstr "Uhrzeit zu dem diese periodische Aufgabe zuletzt modifiziert wurde"
 
-#: models.py:539
+#: django_celery_beat/models.py:546
 msgid "Description"
 msgstr "Beschreibung"
 
-#: models.py:541
+#: django_celery_beat/models.py:548
 msgid "Detailed description about the details of this Periodic Task"
 msgstr "Detaillierte Beschreibung der Details dieser periodischen Aufgabe"
 
-#: models.py:550
+#: django_celery_beat/models.py:557
 msgid "periodic task"
 msgstr "Periodische Aufgabe"
 
-#: models.py:551
+#: django_celery_beat/models.py:558
 msgid "periodic tasks"
 msgstr "Periodische Aufgaben"
 
-#: templates/admin/djcelery/change_list.html:6
+#: django_celery_beat/templates/admin/djcelery/change_list.html:6
 msgid "Home"
 msgstr "Start"
diff --git a/django_celery_beat/locale/es/LC_MESSAGES/django.mo b/django_celery_beat/locale/es/LC_MESSAGES/django.mo
index 89cd5dc..aa7d417 100644
Binary files a/django_celery_beat/locale/es/LC_MESSAGES/django.mo and b/django_celery_beat/locale/es/LC_MESSAGES/django.mo differ
diff --git a/django_celery_beat/locale/es/LC_MESSAGES/django.po b/django_celery_beat/locale/es/LC_MESSAGES/django.po
index 7317fcc..0faa3b3 100644
--- a/django_celery_beat/locale/es/LC_MESSAGES/django.po
+++ b/django_celery_beat/locale/es/LC_MESSAGES/django.po
@@ -257,9 +257,9 @@ msgid "Day(s) Of The Week"
 msgstr "Día(s) de la semana"
 
 #: django_celery_beat/models.py:274
-msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\", Sunday is 0 or 7, Monday is 1. (Example: \"0,5\")"
 msgstr ""
-"Días de la semana Cron cuando ejecutar. Usa \"*\" para \"todos\". (Ejemplo: "
+"Días de la semana Cron cuando ejecutar. Usa \"*\" para \"todos\", Domingo es 0 o 7, Lunes es 1. (Ejemplo: "
 "\"0,5\")"
 
 #: django_celery_beat/models.py:280
diff --git a/django_celery_beat/locale/fr/LC_MESSAGES/django.mo b/django_celery_beat/locale/fr/LC_MESSAGES/django.mo
index 340c1bb..8adf028 100644
Binary files a/django_celery_beat/locale/fr/LC_MESSAGES/django.mo and b/django_celery_beat/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/django_celery_beat/locale/fr/LC_MESSAGES/django.po b/django_celery_beat/locale/fr/LC_MESSAGES/django.po
index a5a8929..b7f8d3b 100644
--- a/django_celery_beat/locale/fr/LC_MESSAGES/django.po
+++ b/django_celery_beat/locale/fr/LC_MESSAGES/django.po
@@ -7,69 +7,86 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-11-10 14:36+0000\n"
+"POT-Creation-Date: 2022-12-22 19:03+0000\n"
 "PO-Revision-Date: 2022-10-14 23:48+0200\n"
 "Last-Translator: Álvaro Mondéjar <mondejar1994@gmail.com>\n"
-"Language-Team: n"
-"Language: fr\n"
+"Language-Team: nLanguage: fr\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: django_celery_beat/admin.py:69
+#: django_celery_beat/admin.py:60
 msgid "Task (registered)"
 msgstr "Tâche (enregistrée)"
 
-#: django_celery_beat/admin.py:73
+#: django_celery_beat/admin.py:64
 msgid "Task (custom)"
 msgstr "Tâche (personalisée)"
 
-#: django_celery_beat/admin.py:90
+#: django_celery_beat/admin.py:81
 msgid "Need name of task"
 msgstr "Besoin du nom de la tâche"
 
-#: django_celery_beat/admin.py:96 django_celery_beat/models.py:595
+#: django_celery_beat/admin.py:87 django_celery_beat/models.py:605
 msgid "Only one can be set, in expires and expire_seconds"
 msgstr "Seulement un peu être définie, soit expires ou expire_seconds"
 
-#: django_celery_beat/admin.py:106
+#: django_celery_beat/admin.py:97
 #, python-format
 msgid "Unable to parse JSON: %s"
 msgstr "Incapable d'analyser le JSON: %s"
 
-#: django_celery_beat/admin.py:172
+#: django_celery_beat/admin.py:125
+#, fuzzy
+#| msgid "Solar Schedule"
+msgid "Schedule"
+msgstr "Planification Solaire"
+
+#: django_celery_beat/admin.py:130
+#, fuzzy
+#| msgid "Keyword Arguments"
+msgid "Arguments"
+msgstr "Arguments Nommés"
+
+#: django_celery_beat/admin.py:134
+msgid "Execution Options"
+msgstr ""
+
+#: django_celery_beat/admin.py:177
 #, python-brace-format
 msgid "{0} task{1} {2} successfully {3}"
 msgstr "{0} tâche{1} {2} avec succès {3}"
 
-#: django_celery_beat/admin.py:175 django_celery_beat/admin.py:237
+#: django_celery_beat/admin.py:180 django_celery_beat/admin.py:247
 msgid "was,were"
 msgstr "a été,ont été"
 
-#: django_celery_beat/admin.py:184
+#: django_celery_beat/admin.py:189
 msgid "Enable selected tasks"
 msgstr "Active les tâches sélectionnées"
 
-#: django_celery_beat/admin.py:190
+#: django_celery_beat/admin.py:195
 msgid "Disable selected tasks"
 msgstr "Désactive les tâches sélectionnées"
 
-#: django_celery_beat/admin.py:202
+#: django_celery_beat/admin.py:207
 msgid "Toggle activity of selected tasks"
 msgstr "Bascule l'activité des tâches sélectionnées"
 
-#: django_celery_beat/admin.py:222
-#, python-brace-format
-msgid "task \"{0}\" not found"
+#: django_celery_beat/admin.py:228
+#, fuzzy, python-brace-format
+#| msgid "task \"{0}\" not found"
+msgid "task \"{not_found_task_name}\" not found"
 msgstr "tâche \"{0}\" introuvable"
 
-#: django_celery_beat/admin.py:234
+#: django_celery_beat/admin.py:244
 #, python-brace-format
 msgid "{0} task{1} {2} successfully run"
 msgstr "{0} tâche{1} {2} a fonctionnée avec succès"
 
-#: django_celery_beat/admin.py:240
+#: django_celery_beat/admin.py:250
 msgid "Run selected tasks"
 msgstr "Démarre les tâches sélectionnées"
 
@@ -77,242 +94,247 @@ msgstr "Démarre les tâches sélectionnées"
 msgid "Periodic Tasks"
 msgstr "Tâches Périodique"
 
-#: django_celery_beat/models.py:26
+#: django_celery_beat/models.py:30
 msgid "Days"
 msgstr "Jours"
 
-#: django_celery_beat/models.py:27
+#: django_celery_beat/models.py:31
 msgid "Hours"
 msgstr "Heures"
 
-#: django_celery_beat/models.py:28
+#: django_celery_beat/models.py:32
 msgid "Minutes"
 msgstr "Minutes"
 
-#: django_celery_beat/models.py:29
+#: django_celery_beat/models.py:33
 msgid "Seconds"
 msgstr "Secondes"
 
-#: django_celery_beat/models.py:30
+#: django_celery_beat/models.py:34
 msgid "Microseconds"
 msgstr "Microsecondes"
 
-#: django_celery_beat/models.py:34
+#: django_celery_beat/models.py:38
 msgid "Day"
 msgstr "Jour"
 
-#: django_celery_beat/models.py:35
+#: django_celery_beat/models.py:39
 msgid "Hour"
 msgstr "Heure"
 
-#: django_celery_beat/models.py:36
+#: django_celery_beat/models.py:40
 msgid "Minute"
 msgstr "Minute"
 
-#: django_celery_beat/models.py:37
+#: django_celery_beat/models.py:41
 msgid "Second"
 msgstr "Seconde"
 
-#: django_celery_beat/models.py:38
+#: django_celery_beat/models.py:42
 msgid "Microsecond"
 msgstr "Microseconde"
 
-#: django_celery_beat/models.py:42
+#: django_celery_beat/models.py:46
 msgid "Astronomical dawn"
 msgstr "Aube astronomique"
 
-#: django_celery_beat/models.py:43
+#: django_celery_beat/models.py:47
 msgid "Civil dawn"
 msgstr "Aube civile"
 
-#: django_celery_beat/models.py:44
+#: django_celery_beat/models.py:48
 msgid "Nautical dawn"
 msgstr "Aube nautique"
 
-#: django_celery_beat/models.py:45
+#: django_celery_beat/models.py:49
 msgid "Astronomical dusk"
 msgstr "Crépuscule astronomique"
 
-#: django_celery_beat/models.py:46
+#: django_celery_beat/models.py:50
 msgid "Civil dusk"
 msgstr "Crépuscule civil"
 
-#: django_celery_beat/models.py:47
+#: django_celery_beat/models.py:51
 msgid "Nautical dusk"
 msgstr "Crépuscule nautique"
 
-#: django_celery_beat/models.py:48
+#: django_celery_beat/models.py:52
 msgid "Solar noon"
 msgstr "Midi solaire"
 
-#: django_celery_beat/models.py:49
+#: django_celery_beat/models.py:53
 msgid "Sunrise"
 msgstr "Lever du soleil"
 
-#: django_celery_beat/models.py:50
+#: django_celery_beat/models.py:54
 msgid "Sunset"
 msgstr "Coucher du soleil"
 
-#: django_celery_beat/models.py:82
+#: django_celery_beat/models.py:88
 msgid "Solar Event"
 msgstr "Évènement Solaire"
 
-#: django_celery_beat/models.py:83
+#: django_celery_beat/models.py:89
 msgid "The type of solar event when the job should run"
 msgstr "Le type d'évènement solaire pour lequel la tâche devrait démarrer"
 
-#: django_celery_beat/models.py:87
+#: django_celery_beat/models.py:93
 msgid "Latitude"
 msgstr "Latitude"
 
-#: django_celery_beat/models.py:88
+#: django_celery_beat/models.py:94
 msgid "Run the task when the event happens at this latitude"
 msgstr "Démarre cette tâche lorsque l'évènement se produit à cette latitude"
 
-#: django_celery_beat/models.py:93
+#: django_celery_beat/models.py:99
 msgid "Longitude"
 msgstr "Longitude"
 
-#: django_celery_beat/models.py:94
+#: django_celery_beat/models.py:100
 msgid "Run the task when the event happens at this longitude"
 msgstr "Démarre cette tâche lorsque cet évènement se produit à cette longitude"
 
-#: django_celery_beat/models.py:101
+#: django_celery_beat/models.py:107
 msgid "solar event"
 msgstr "évènement solaire"
 
-#: django_celery_beat/models.py:102
+#: django_celery_beat/models.py:108
 msgid "solar events"
 msgstr "évènements solaire"
 
-#: django_celery_beat/models.py:151
+#: django_celery_beat/models.py:158
 msgid "Number of Periods"
 msgstr "Nombre de Périodes"
 
-#: django_celery_beat/models.py:152
+#: django_celery_beat/models.py:159
 msgid "Number of interval periods to wait before running the task again"
 msgstr ""
 "Nombre d'intervale de périodes à attendre avant de démarrer la tâche à "
 "nouveau"
 
-#: django_celery_beat/models.py:158
+#: django_celery_beat/models.py:165
 msgid "Interval Period"
 msgstr "Période d'Intervale"
 
-#: django_celery_beat/models.py:159
+#: django_celery_beat/models.py:166
 msgid "The type of period between task runs (Example: days)"
 msgstr "Le type de période entre chaque démarrage de tâche (Exemple: jours)"
 
-#: django_celery_beat/models.py:165
+#: django_celery_beat/models.py:172
 msgid "interval"
 msgstr "intervale"
 
-#: django_celery_beat/models.py:166
+#: django_celery_beat/models.py:173
 msgid "intervals"
 msgstr "intervales"
 
-#: django_celery_beat/models.py:194
+#: django_celery_beat/models.py:200
 msgid "every {}"
 msgstr "chaque {}"
 
-#: django_celery_beat/models.py:199
+#: django_celery_beat/models.py:205
 msgid "every {} {}"
 msgstr "chaque {} {}"
 
-#: django_celery_beat/models.py:210
+#: django_celery_beat/models.py:216
 msgid "Clock Time"
 msgstr "Horaire"
 
-#: django_celery_beat/models.py:211
+#: django_celery_beat/models.py:217
 msgid "Run the task at clocked time"
 msgstr "Démarre la tâche à l'horaire définie"
 
-#: django_celery_beat/models.py:217 django_celery_beat/models.py:517
-msgid "Set to False to disable the schedule"
-msgstr "Mettre à Faux pour désactiver la planification"
-
 #: django_celery_beat/models.py:223 django_celery_beat/models.py:224
 msgid "clocked"
 msgstr "horaire"
 
-#: django_celery_beat/models.py:266
+#: django_celery_beat/models.py:264
 msgid "Minute(s)"
 msgstr "Minute⋅s"
 
-#: django_celery_beat/models.py:268
+#: django_celery_beat/models.py:266
 msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")"
 msgstr ""
 "Minutes Cron pour démarrer. Utilisez \"*\" pour \"toutes\". (Exemple: "
 "\"0,30\")"
 
-#: django_celery_beat/models.py:273
+#: django_celery_beat/models.py:271
 msgid "Hour(s)"
 msgstr "Heure⋅s"
 
-#: django_celery_beat/models.py:275
+#: django_celery_beat/models.py:273
 msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")"
 msgstr ""
 "Heures Cron pour démarrer. Utilisez \"*\" pour \"toutes\". (Exemple: "
 "\"8,20\")"
 
-#: django_celery_beat/models.py:280
+#: django_celery_beat/models.py:278
 msgid "Day(s) Of The Week"
 msgstr "Jour⋅s de la semaine"
 
-#: django_celery_beat/models.py:282
-msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+#: django_celery_beat/models.py:280
+#, fuzzy
+#| msgid ""
+#| "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+msgid ""
+"Cron Days Of The Week to Run. Use \"*\" for \"all\", Sunday is 0 or 7, "
+"Monday is 1. (Example: \"0,5\")"
 msgstr ""
 "Jours De La Semaine Cron pour Démarrer. Utilisez \"*\" pour \"tous\". "
 "(Exemple: \"0,5\")"
 
-#: django_celery_beat/models.py:288
+#: django_celery_beat/models.py:286
 msgid "Day(s) Of The Month"
 msgstr "Jour⋅s Du mois"
 
-#: django_celery_beat/models.py:290
+#: django_celery_beat/models.py:288
 msgid ""
 "Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")"
 msgstr ""
 "Jours Du mois Cron pour démarrer. Utilisez \"*\" pour \"tous\". (Exemple: "
 "\"1,15\")"
 
-#: django_celery_beat/models.py:296
+#: django_celery_beat/models.py:294
 msgid "Month(s) Of The Year"
 msgstr "Mois De L'année"
 
-#: django_celery_beat/models.py:298
+#: django_celery_beat/models.py:296
+#, fuzzy
+#| msgid ""
+#| "Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
 msgid ""
-"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
+"Cron Months (1-12) Of The Year to Run. Use \"*\" for \"all\". (Example: "
+"\"1,12\")"
 msgstr ""
-"Mois De L'année Cron pour démarrer. Utilisez \"*\" pour \"tous\". (Exemple:"
-" ,6\")"
+"Mois De L'année Cron pour démarrer. Utilisez \"*\" pour \"tous\". (Exemple: "
+",6\")"
 
-#: django_celery_beat/models.py:305
+#: django_celery_beat/models.py:304
 msgid "Cron Timezone"
 msgstr "Fuseau horaire Cron"
 
-#: django_celery_beat/models.py:307
+#: django_celery_beat/models.py:306
 msgid "Timezone to Run the Cron Schedule on. Default is UTC."
 msgstr ""
 "Fuseau horaire pour lequel démarrer la planification Cron. UTC par défaut."
 
-#: django_celery_beat/models.py:313
+#: django_celery_beat/models.py:312
 msgid "crontab"
 msgstr "crontab"
 
-#: django_celery_beat/models.py:314
+#: django_celery_beat/models.py:313
 msgid "crontabs"
 msgstr "crontabs"
 
-#: django_celery_beat/models.py:399
+#: django_celery_beat/models.py:404
 msgid "Name"
 msgstr "Nom"
 
-#: django_celery_beat/models.py:400
+#: django_celery_beat/models.py:405
 msgid "Short Description For This Task"
 msgstr "Description courte pour cette tâche"
 
-#: django_celery_beat/models.py:405
+#: django_celery_beat/models.py:410
 msgid ""
 "The Name of the Celery Task that Should be Run.  (Example: \"proj.tasks."
 "import_contacts\")"
@@ -320,11 +342,11 @@ msgstr ""
 "Le nom de la tâche Celery qui devrait être démarrée.  (Exemple: \"proj.tasks."
 "import_contacts\")"
 
-#: django_celery_beat/models.py:413
+#: django_celery_beat/models.py:418
 msgid "Interval Schedule"
 msgstr "Planification intervalée"
 
-#: django_celery_beat/models.py:414
+#: django_celery_beat/models.py:419
 msgid ""
 "Interval Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -332,11 +354,11 @@ msgstr ""
 "Planification intervalée pour démarrer cette tâche. Ne mettez qu'un seul "
 "type de planification, laissez les autres vides"
 
-#: django_celery_beat/models.py:419
+#: django_celery_beat/models.py:424
 msgid "Crontab Schedule"
 msgstr "Planification Crontab"
 
-#: django_celery_beat/models.py:420
+#: django_celery_beat/models.py:425
 msgid ""
 "Crontab Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -344,11 +366,11 @@ msgstr ""
 "Planification Crontab pour démarrer cette tâche. Ne mettez qu'un seul type "
 "de planification, laissez les autres vides"
 
-#: django_celery_beat/models.py:425
+#: django_celery_beat/models.py:430
 msgid "Solar Schedule"
 msgstr "Planification Solaire"
 
-#: django_celery_beat/models.py:426
+#: django_celery_beat/models.py:431
 msgid ""
 "Solar Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -356,11 +378,11 @@ msgstr ""
 "Planification Solaire pour démarrer cette tâche. Ne mettez qu'un seul type "
 "de planification, laissez les autres vides"
 
-#: django_celery_beat/models.py:431
+#: django_celery_beat/models.py:436
 msgid "Clocked Schedule"
 msgstr "Planification Horaire"
 
-#: django_celery_beat/models.py:432
+#: django_celery_beat/models.py:437
 msgid ""
 "Clocked Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -368,61 +390,61 @@ msgstr ""
 "Planification Horaire pour démarrer cette tâche. Ne mettez qu'un seul type "
 "de planification, laissez les autres vides"
 
-#: django_celery_beat/models.py:438
+#: django_celery_beat/models.py:443
 msgid "Positional Arguments"
 msgstr "Arguments Positionnels"
 
-#: django_celery_beat/models.py:440
+#: django_celery_beat/models.py:445
 msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])"
 msgstr "Arguments positionnels encodés en JSON (Exemple: [\"arg1\", \"arg2\"])"
 
-#: django_celery_beat/models.py:445
+#: django_celery_beat/models.py:450
 msgid "Keyword Arguments"
 msgstr "Arguments Nommés"
 
-#: django_celery_beat/models.py:447
+#: django_celery_beat/models.py:452
 msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})"
 msgstr "Arguments Nommés encodés en JSON (Exemple: {\"argument\": \"valeur\"})"
 
-#: django_celery_beat/models.py:453
+#: django_celery_beat/models.py:458
 msgid "Queue Override"
 msgstr "Surcharge de file d'attente"
 
-#: django_celery_beat/models.py:455
+#: django_celery_beat/models.py:460
 msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing."
 msgstr ""
 "File d'attente définie dans CELERY_TASK_QEUEUS. Laissez Vide pour la mise en "
 "file d'attente par défaut."
 
-#: django_celery_beat/models.py:464
+#: django_celery_beat/models.py:469
 msgid "Exchange"
 msgstr "Échange"
 
-#: django_celery_beat/models.py:465
+#: django_celery_beat/models.py:470
 msgid "Override Exchange for low-level AMQP routing"
 msgstr "Surcharge d'échange pour un routage AMQP bas-niveau"
 
-#: django_celery_beat/models.py:469
+#: django_celery_beat/models.py:474
 msgid "Routing Key"
 msgstr "Clé de routage"
 
-#: django_celery_beat/models.py:470
+#: django_celery_beat/models.py:475
 msgid "Override Routing Key for low-level AMQP routing"
 msgstr "Surcharge de clé de routage pour un routage AMQP bas-niveau"
 
-#: django_celery_beat/models.py:474
+#: django_celery_beat/models.py:479
 msgid "AMQP Message Headers"
 msgstr "Message d'en-têtes AMQP"
 
-#: django_celery_beat/models.py:475
+#: django_celery_beat/models.py:480
 msgid "JSON encoded message headers for the AMQP message."
 msgstr "Message d'en-têtes encodés en JSON pour le message AMQP"
 
-#: django_celery_beat/models.py:481
+#: django_celery_beat/models.py:486
 msgid "Priority"
 msgstr "Priorité"
 
-#: django_celery_beat/models.py:483
+#: django_celery_beat/models.py:488
 msgid ""
 "Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority "
 "reversed, 0 is highest)."
@@ -430,22 +452,22 @@ msgstr ""
 "Valeur de priorité entre 0 et 255. Supporté par: RabbitMQ, Redis (priorité "
 "inversé, 0 est plus élevé)."
 
-#: django_celery_beat/models.py:488
+#: django_celery_beat/models.py:493
 msgid "Expires Datetime"
 msgstr "Date et heure d'expiration"
 
-#: django_celery_beat/models.py:490
+#: django_celery_beat/models.py:495
 msgid ""
 "Datetime after which the schedule will no longer trigger the task to run"
 msgstr ""
 "Date et heure après laquelle la planification ne déclenchera plus la tâche à "
 "démarrer"
 
-#: django_celery_beat/models.py:495
+#: django_celery_beat/models.py:500
 msgid "Expires timedelta with seconds"
 msgstr "Différence de temps en secondes d'expiration"
 
-#: django_celery_beat/models.py:497
+#: django_celery_beat/models.py:502
 msgid ""
 "Timedelta with seconds which the schedule will no longer trigger the task to "
 "run"
@@ -453,33 +475,37 @@ msgstr ""
 "Différence de temps en secondes à laquelle la planification ne déclenchera "
 "plus la tâche à démarrer"
 
-#: django_celery_beat/models.py:503
+#: django_celery_beat/models.py:508
 msgid "One-off Task"
 msgstr "Tâche Ponctuelle"
 
-#: django_celery_beat/models.py:505
+#: django_celery_beat/models.py:510
 msgid "If True, the schedule will only run the task a single time"
 msgstr "Si Vrai, la planification ne démarrera la tâche qu'une seule fois"
 
-#: django_celery_beat/models.py:507
-msgid "Enabled"
-msgstr "Activé"
-
-#: django_celery_beat/models.py:509
+#: django_celery_beat/models.py:514
 msgid "Start Datetime"
 msgstr "Date et heure de démarrage"
 
-#: django_celery_beat/models.py:511
+#: django_celery_beat/models.py:516
 msgid "Datetime when the schedule should begin triggering the task to run"
 msgstr ""
 "Date et heure à laquelle la planification devrait commencer à déclencher la "
 "tâche à démarrer"
 
+#: django_celery_beat/models.py:521
+msgid "Enabled"
+msgstr "Activé"
+
 #: django_celery_beat/models.py:522
+msgid "Set to False to disable the schedule"
+msgstr "Mettre à Faux pour désactiver la planification"
+
+#: django_celery_beat/models.py:527
 msgid "Last Run Datetime"
 msgstr "Date et heure du dernier démarrage"
 
-#: django_celery_beat/models.py:524
+#: django_celery_beat/models.py:529
 msgid ""
 "Datetime that the schedule last triggered the task to run. Reset to None if "
 "enabled is set to False."
@@ -487,34 +513,38 @@ msgstr ""
 "Date et heure à laquelle la planification à dernièrement déclenchée la tâche "
 "à démarrer. Est remis à Vide si activé est mis à Faux"
 
-#: django_celery_beat/models.py:529
+#: django_celery_beat/models.py:534
 msgid "Total Run Count"
 msgstr "Nombre total de démarrages"
 
-#: django_celery_beat/models.py:531
+#: django_celery_beat/models.py:536
 msgid "Running count of how many times the schedule has triggered the task"
 msgstr "Compte combien de fois la planification a déclenchée la tâche"
 
-#: django_celery_beat/models.py:536
+#: django_celery_beat/models.py:541
 msgid "Last Modified"
 msgstr "Dernière modification"
 
-#: django_celery_beat/models.py:537
+#: django_celery_beat/models.py:542
 msgid "Datetime that this PeriodicTask was last modified"
 msgstr "Date et heure de la dernière modification de cette Tâche Périodique"
 
-#: django_celery_beat/models.py:541
+#: django_celery_beat/models.py:546
 msgid "Description"
 msgstr "Description"
 
-#: django_celery_beat/models.py:543
+#: django_celery_beat/models.py:548
 msgid "Detailed description about the details of this Periodic Task"
 msgstr "Description détaillée à propos des détails de cette Tâche Périodique"
 
-#: django_celery_beat/models.py:552
+#: django_celery_beat/models.py:557
 msgid "periodic task"
 msgstr "tâche périodique"
 
-#: django_celery_beat/models.py:553
+#: django_celery_beat/models.py:558
 msgid "periodic tasks"
 msgstr "tâches périodique"
+
+#: django_celery_beat/templates/admin/djcelery/change_list.html:6
+msgid "Home"
+msgstr ""
diff --git a/django_celery_beat/locale/ko/LC_MESSAGES/django.mo b/django_celery_beat/locale/ko/LC_MESSAGES/django.mo
index 3c77300..f392d06 100644
Binary files a/django_celery_beat/locale/ko/LC_MESSAGES/django.mo and b/django_celery_beat/locale/ko/LC_MESSAGES/django.mo differ
diff --git a/django_celery_beat/locale/ko/LC_MESSAGES/django.po b/django_celery_beat/locale/ko/LC_MESSAGES/django.po
index c776b03..aed2c74 100644
--- a/django_celery_beat/locale/ko/LC_MESSAGES/django.po
+++ b/django_celery_beat/locale/ko/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-24 09:35+0000\n"
+"POT-Creation-Date: 2022-12-22 19:03+0000\n"
 "PO-Revision-Date: 2022-10-14 23:48+0200\n"
 "Last-Translator: Jaeyoung Heo <jay.jaeyoung@gmail.com>\n"
 "Language-Team: \n"
@@ -16,59 +16,77 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-#: django_celery_beat/admin.py:64
+
+#: django_celery_beat/admin.py:60
 msgid "Task (registered)"
 msgstr "등록 태스크 목록"
 
-#: django_celery_beat/admin.py:68
+#: django_celery_beat/admin.py:64
 msgid "Task (custom)"
 msgstr "사용자 정의 태스크"
 
-#: django_celery_beat/admin.py:85
+#: django_celery_beat/admin.py:81
 msgid "Need name of task"
 msgstr "태스크 이름이 필요 합니다."
 
-#: django_celery_beat/admin.py:91 django_celery_beat/models.py:586
+#: django_celery_beat/admin.py:87 django_celery_beat/models.py:605
 msgid "Only one can be set, in expires and expire_seconds"
 msgstr "'만료 시각'과 '만료 기준 초' 중에 하나만 지정할 수 있습니다."
 
-#: django_celery_beat/admin.py:101
+#: django_celery_beat/admin.py:97
 #, python-format
 msgid "Unable to parse JSON: %s"
 msgstr "해석할 수 없습니다. JSON: %s"
 
-#: django_celery_beat/admin.py:167
+#: django_celery_beat/admin.py:125
+#, fuzzy
+#| msgid "Solar Schedule"
+msgid "Schedule"
+msgstr "Solar Schedule"
+
+#: django_celery_beat/admin.py:130
+#, fuzzy
+#| msgid "Keyword Arguments"
+msgid "Arguments"
+msgstr "Keyword Arguments"
+
+#: django_celery_beat/admin.py:134
+msgid "Execution Options"
+msgstr ""
+
+#: django_celery_beat/admin.py:177
 #, python-brace-format
 msgid "{0} task{1} {2} successfully {3}"
 msgstr "{0} 태스크{1} {2} 성공적으로 {3}"
 
-#: django_celery_beat/admin.py:170 django_celery_beat/admin.py:233
+#: django_celery_beat/admin.py:180 django_celery_beat/admin.py:247
 msgid "was,were"
 msgstr "가,들이"
 
-#: django_celery_beat/admin.py:179
+#: django_celery_beat/admin.py:189
 msgid "Enable selected tasks"
 msgstr "선택된 태스크들을 활성화 합니다."
 
-#: django_celery_beat/admin.py:185
+#: django_celery_beat/admin.py:195
 msgid "Disable selected tasks"
 msgstr "선택된 태스크들을 비활성화 합니다."
 
-#: django_celery_beat/admin.py:197
+#: django_celery_beat/admin.py:207
 msgid "Toggle activity of selected tasks"
 msgstr "선택된 태스크들의 활성화 상태를 토글 합니다."
 
-#: django_celery_beat/admin.py:218
-#, python-brace-format
-msgid "task \"{0}\" not found"
+#: django_celery_beat/admin.py:228
+#, fuzzy, python-brace-format
+#| msgid "task \"{0}\" not found"
+msgid "task \"{not_found_task_name}\" not found"
 msgstr "태스크 \"{0}\" 을 찾을 수 없습니다."
 
-#: django_celery_beat/admin.py:230
+#: django_celery_beat/admin.py:244
 #, python-brace-format
 msgid "{0} task{1} {2} successfully run"
 msgstr "{0} 태스크{1} {2} 성공적으로 작동했습니다."
 
-#: django_celery_beat/admin.py:236
+#: django_celery_beat/admin.py:250
 msgid "Run selected tasks"
 msgstr "선택된 태스크들을 실행 합니다."
 
@@ -76,236 +94,245 @@ msgstr "선택된 태스크들을 실행 합니다."
 msgid "Periodic Tasks"
 msgstr "주기적인 태스크들"
 
-#: django_celery_beat/models.py:26
+#: django_celery_beat/models.py:30
 msgid "Days"
 msgstr "일"
 
-#: django_celery_beat/models.py:27
+#: django_celery_beat/models.py:31
 msgid "Hours"
 msgstr "시간"
 
-#: django_celery_beat/models.py:28
+#: django_celery_beat/models.py:32
 msgid "Minutes"
 msgstr "분"
 
-#: django_celery_beat/models.py:29
+#: django_celery_beat/models.py:33
 msgid "Seconds"
 msgstr "초"
 
-#: django_celery_beat/models.py:30
+#: django_celery_beat/models.py:34
 msgid "Microseconds"
 msgstr "마이크로초"
 
-#: django_celery_beat/models.py:34
+#: django_celery_beat/models.py:38
 msgid "Day"
 msgstr "일"
 
-#: django_celery_beat/models.py:35
+#: django_celery_beat/models.py:39
 msgid "Hour"
 msgstr "시"
 
-#: django_celery_beat/models.py:36
+#: django_celery_beat/models.py:40
 msgid "Minute"
 msgstr "분"
 
-#: django_celery_beat/models.py:37
+#: django_celery_beat/models.py:41
 msgid "Second"
 msgstr "초"
 
-#: django_celery_beat/models.py:38
+#: django_celery_beat/models.py:42
 msgid "Microsecond"
 msgstr "마이크로초"
 
-#: django_celery_beat/models.py:42
+#: django_celery_beat/models.py:46
 msgid "Astronomical dawn"
 msgstr "천문 박명"
 
-#: django_celery_beat/models.py:43
+#: django_celery_beat/models.py:47
 msgid "Civil dawn"
 msgstr "시민 박명"
 
-#: django_celery_beat/models.py:44
+#: django_celery_beat/models.py:48
 msgid "Nautical dawn"
 msgstr "항해 박명"
 
-#: django_celery_beat/models.py:45
+#: django_celery_beat/models.py:49
 msgid "Astronomical dusk"
 msgstr "천문 황혼"
 
-#: django_celery_beat/models.py:46
+#: django_celery_beat/models.py:50
 msgid "Civil dusk"
 msgstr "시민 황혼"
 
-#: django_celery_beat/models.py:47
+#: django_celery_beat/models.py:51
 msgid "Nautical dusk"
 msgstr "항해 황혼"
 
-#: django_celery_beat/models.py:48
+#: django_celery_beat/models.py:52
 msgid "Solar noon"
 msgstr "정오"
 
-#: django_celery_beat/models.py:49
+#: django_celery_beat/models.py:53
 msgid "Sunrise"
 msgstr "일출"
 
-#: django_celery_beat/models.py:50
+#: django_celery_beat/models.py:54
 msgid "Sunset"
 msgstr "일몰"
 
-#: django_celery_beat/models.py:84
+#: django_celery_beat/models.py:88
 msgid "Solar Event"
 msgstr "Solar Event"
 
-#: django_celery_beat/models.py:85
+#: django_celery_beat/models.py:89
 msgid "The type of solar event when the job should run"
 msgstr "태스크가 작동 해야 하는 Solar Event"
 
-#: django_celery_beat/models.py:89
+#: django_celery_beat/models.py:93
 msgid "Latitude"
 msgstr "위도"
 
-#: django_celery_beat/models.py:90
+#: django_celery_beat/models.py:94
 msgid "Run the task when the event happens at this latitude"
 msgstr "입력된 위도에서 Solar Event 가 발생하면 태스크를 실행합니다."
 
-#: django_celery_beat/models.py:95
+#: django_celery_beat/models.py:99
 msgid "Longitude"
 msgstr "경도"
 
-#: django_celery_beat/models.py:96
+#: django_celery_beat/models.py:100
 msgid "Run the task when the event happens at this longitude"
 msgstr "입력된 경도에서 Solar Event 가 발생하면 태스크를 실행합니다."
 
-#: django_celery_beat/models.py:103
+#: django_celery_beat/models.py:107
 msgid "solar event"
 msgstr "solar event"
 
-#: django_celery_beat/models.py:104
+#: django_celery_beat/models.py:108
 msgid "solar events"
 msgstr "solar events"
 
-#: django_celery_beat/models.py:153
+#: django_celery_beat/models.py:158
 msgid "Number of Periods"
 msgstr "매"
 
-#: django_celery_beat/models.py:154
+#: django_celery_beat/models.py:159
 msgid "Number of interval periods to wait before running the task again"
 msgstr "태스크의 다음 동작까지 몇 번의 간격을 기다릴 것인지 입력합니다."
 
-#: django_celery_beat/models.py:160
+#: django_celery_beat/models.py:165
 msgid "Interval Period"
 msgstr "간격"
 
-#: django_celery_beat/models.py:161
+#: django_celery_beat/models.py:166
 msgid "The type of period between task runs (Example: days)"
 msgstr "실행 간격 (예: 일, 시간)"
 
-#: django_celery_beat/models.py:167
+#: django_celery_beat/models.py:172
 msgid "interval"
 msgstr "interval"
 
-#: django_celery_beat/models.py:168
+#: django_celery_beat/models.py:173
 msgid "intervals"
 msgstr "intervals"
 
-#: django_celery_beat/models.py:195
+#: django_celery_beat/models.py:200
 msgid "every {}"
 msgstr "매 {}"
 
-#: django_celery_beat/models.py:200
+#: django_celery_beat/models.py:205
 msgid "every {} {}"
 msgstr "매 {} {}"
 
-#: django_celery_beat/models.py:211
+#: django_celery_beat/models.py:216
 msgid "Clock Time"
 msgstr "Clock Time"
 
-#: django_celery_beat/models.py:212
+#: django_celery_beat/models.py:217
 msgid "Run the task at clocked time"
 msgstr "Clock Time 기준으로 태스크를 작동합니다."
 
-#: django_celery_beat/models.py:218 django_celery_beat/models.py:219
+#: django_celery_beat/models.py:223 django_celery_beat/models.py:224
 msgid "clocked"
 msgstr "clocked"
 
-#: django_celery_beat/models.py:258
+#: django_celery_beat/models.py:264
 msgid "Minute(s)"
 msgstr "분"
 
-#: django_celery_beat/models.py:260
+#: django_celery_beat/models.py:266
 msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")"
 msgstr "Cron 의 분. 모두인 경우 \"*\". (예: \"0,30\")"
 
-#: django_celery_beat/models.py:265
+#: django_celery_beat/models.py:271
 msgid "Hour(s)"
 msgstr "시"
 
-#: django_celery_beat/models.py:267
+#: django_celery_beat/models.py:273
 msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")"
 msgstr "Cron 의 시간. 모두인 경우 \"*\". (예: \"8,20\")"
 
-#: django_celery_beat/models.py:272
+#: django_celery_beat/models.py:278
 msgid "Day(s) Of The Week"
 msgstr "요일"
 
-#: django_celery_beat/models.py:274
-msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+#: django_celery_beat/models.py:280
+#, fuzzy
+#| msgid ""
+#| "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+msgid ""
+"Cron Days Of The Week to Run. Use \"*\" for \"all\", Sunday is 0 or 7, "
+"Monday is 1. (Example: \"0,5\")"
 msgstr "Cron 의 요일. 모두인 경우 \"*\". (예: \"0,5\")"
 
-#: django_celery_beat/models.py:280
+#: django_celery_beat/models.py:286
 msgid "Day(s) Of The Month"
 msgstr "일"
 
-#: django_celery_beat/models.py:282
+#: django_celery_beat/models.py:288
 msgid ""
 "Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")"
 msgstr "Cron 의 일. 모두인 경우 \"*\". (예: \"1,15\")"
 
-#: django_celery_beat/models.py:288
+#: django_celery_beat/models.py:294
 msgid "Month(s) Of The Year"
 msgstr "월"
 
-#: django_celery_beat/models.py:290
+#: django_celery_beat/models.py:296
+#, fuzzy
+#| msgid ""
+#| "Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
 msgid ""
-"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
+"Cron Months (1-12) Of The Year to Run. Use \"*\" for \"all\". (Example: "
+"\"1,12\")"
 msgstr "Cron 의 월. 모두인 경우 \"*\"."
 
-#: django_celery_beat/models.py:297
+#: django_celery_beat/models.py:304
 msgid "Cron Timezone"
 msgstr "타임존"
 
-#: django_celery_beat/models.py:299
+#: django_celery_beat/models.py:306
 msgid "Timezone to Run the Cron Schedule on. Default is UTC."
 msgstr "Cron 의 타임존. 기본값은 UTC"
 
-#: django_celery_beat/models.py:305
+#: django_celery_beat/models.py:312
 msgid "crontab"
 msgstr "crontab"
 
-#: django_celery_beat/models.py:306
+#: django_celery_beat/models.py:313
 msgid "crontabs"
 msgstr "crontabs"
 
-#: django_celery_beat/models.py:390
+#: django_celery_beat/models.py:404
 msgid "Name"
 msgstr "태스크 이름"
 
-#: django_celery_beat/models.py:391
+#: django_celery_beat/models.py:405
 msgid "Short Description For This Task"
 msgstr "태스크의 간단한 설명을 작성합니다."
 
-#: django_celery_beat/models.py:396
+#: django_celery_beat/models.py:410
 msgid ""
 "The Name of the Celery Task that Should be Run.  (Example: \"proj.tasks."
 "import_contacts\")"
 msgstr ""
 "실행 되어야 하는 셀러리 태스크의 이름 (예: \"proj.tasks.import_contacts\")"
 
-#: django_celery_beat/models.py:404
+#: django_celery_beat/models.py:418
 msgid "Interval Schedule"
 msgstr "Interval Schedule"
 
-#: django_celery_beat/models.py:405
+#: django_celery_beat/models.py:419
 msgid ""
 "Interval Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -313,11 +340,11 @@ msgstr ""
 "태스크 실행 Interval Schedule. 한 종류의 스케줄 타입을 지정하면 나머지는 빈 "
 "값으로 두어야 합니다."
 
-#: django_celery_beat/models.py:410
+#: django_celery_beat/models.py:424
 msgid "Crontab Schedule"
 msgstr "Crontab Schedule"
 
-#: django_celery_beat/models.py:411
+#: django_celery_beat/models.py:425
 msgid ""
 "Crontab Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -325,11 +352,11 @@ msgstr ""
 "태스크 실행 Crontab Schedule. 한 종류의 스케줄 타입을 지정하면 나머지는 빈 값"
 "으로 두어야 합니다."
 
-#: django_celery_beat/models.py:416
+#: django_celery_beat/models.py:430
 msgid "Solar Schedule"
 msgstr "Solar Schedule"
 
-#: django_celery_beat/models.py:417
+#: django_celery_beat/models.py:431
 msgid ""
 "Solar Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -337,11 +364,11 @@ msgstr ""
 "태스크 실행을 위한 Solar Schedule. 한 종류의 스케줄 타입을 지정하면 나머지는 "
 "빈 값으로 두어야 합니다."
 
-#: django_celery_beat/models.py:422
+#: django_celery_beat/models.py:436
 msgid "Clocked Schedule"
 msgstr "Clocked Schedule"
 
-#: django_celery_beat/models.py:423
+#: django_celery_beat/models.py:437
 msgid ""
 "Clocked Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
@@ -349,59 +376,59 @@ msgstr ""
 "태스크 실행을 위한 Clocked Schedule. 한 종류의 스케줄 타입을 지정하면 나머지"
 "는 빈 값으로 두어야 합니다."
 
-#: django_celery_beat/models.py:429
+#: django_celery_beat/models.py:443
 msgid "Positional Arguments"
 msgstr "Positional Arguments"
 
-#: django_celery_beat/models.py:431
+#: django_celery_beat/models.py:445
 msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])"
 msgstr "JSON 형태로 인코딩된 위치 인자 (예: [\"arg1\", \"arg2\"])"
 
-#: django_celery_beat/models.py:436
+#: django_celery_beat/models.py:450
 msgid "Keyword Arguments"
 msgstr "Keyword Arguments"
 
-#: django_celery_beat/models.py:438
+#: django_celery_beat/models.py:452
 msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})"
 msgstr "JSON 형태로 인코딩된 키워드 인자 (예: {\"argument\": \"value\"})"
 
-#: django_celery_beat/models.py:444
+#: django_celery_beat/models.py:458
 msgid "Queue Override"
 msgstr "Queue Override"
 
-#: django_celery_beat/models.py:446
+#: django_celery_beat/models.py:460
 msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing."
 msgstr "CELERY_TASK_QUEES 에 정의된 큐, 빈 값으로 두면 기본 큐를 사용합니다."
 
-#: django_celery_beat/models.py:455
+#: django_celery_beat/models.py:469
 msgid "Exchange"
 msgstr "Exchange"
 
-#: django_celery_beat/models.py:456
+#: django_celery_beat/models.py:470
 msgid "Override Exchange for low-level AMQP routing"
 msgstr "low-level AMQP 를 원하는 경우 Exchange 를 오버라이드 합니다."
 
-#: django_celery_beat/models.py:460
+#: django_celery_beat/models.py:474
 msgid "Routing Key"
 msgstr "Routing Key"
 
-#: django_celery_beat/models.py:461
+#: django_celery_beat/models.py:475
 msgid "Override Routing Key for low-level AMQP routing"
 msgstr "low-level AMQP 를 원하는 경우 Routing Key 를 오버라이드 합니다."
 
-#: django_celery_beat/models.py:465
+#: django_celery_beat/models.py:479
 msgid "AMQP Message Headers"
 msgstr "AMQP 메시지 헤더"
 
-#: django_celery_beat/models.py:466
+#: django_celery_beat/models.py:480
 msgid "JSON encoded message headers for the AMQP message."
 msgstr "AMQP 메시지를 위해 JSON 형식으로 인코딩 된 메시지 헤더"
 
-#: django_celery_beat/models.py:472
+#: django_celery_beat/models.py:486
 msgid "Priority"
 msgstr "Priority"
 
-#: django_celery_beat/models.py:474
+#: django_celery_beat/models.py:488
 msgid ""
 "Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority "
 "reversed, 0 is highest)."
@@ -409,54 +436,54 @@ msgstr ""
 "0과 255사이의 우선 순위 숫자. RabbitMQ, Redis 에서 지원합니다. (0이 높은 우선"
 "순위를 가집니다.)"
 
-#: django_celery_beat/models.py:479
+#: django_celery_beat/models.py:493
 msgid "Expires Datetime"
 msgstr "만료 일시"
 
-#: django_celery_beat/models.py:481
+#: django_celery_beat/models.py:495
 msgid ""
 "Datetime after which the schedule will no longer trigger the task to run"
 msgstr "만료 일시 이후에는 태스크가 작동하지 않습니다."
 
-#: django_celery_beat/models.py:486
+#: django_celery_beat/models.py:500
 msgid "Expires timedelta with seconds"
 msgstr "초 단위 만료 시간"
 
-#: django_celery_beat/models.py:488
+#: django_celery_beat/models.py:502
 msgid ""
 "Timedelta with seconds which the schedule will no longer trigger the task to "
 "run"
 msgstr "입력된 만료 초가 지난 뒤에는 태스크가 작동하지 않습니다."
 
-#: django_celery_beat/models.py:494
+#: django_celery_beat/models.py:508
 msgid "One-off Task"
 msgstr "One-off 태스크"
 
-#: django_celery_beat/models.py:496
+#: django_celery_beat/models.py:510
 msgid "If True, the schedule will only run the task a single time"
 msgstr "체크된 경우, 태스크는 한 번만 실행 됩니다."
 
-#: django_celery_beat/models.py:500
+#: django_celery_beat/models.py:514
 msgid "Start Datetime"
 msgstr "시작 일시"
 
-#: django_celery_beat/models.py:502
+#: django_celery_beat/models.py:516
 msgid "Datetime when the schedule should begin triggering the task to run"
 msgstr "태스크 스케줄의 작동 시작 일시"
 
-#: django_celery_beat/models.py:507
+#: django_celery_beat/models.py:521
 msgid "Enabled"
 msgstr "활성화 여부"
 
-#: django_celery_beat/models.py:508
+#: django_celery_beat/models.py:522
 msgid "Set to False to disable the schedule"
 msgstr "체크를 해제하면 비활성화가 됩니다."
 
-#: django_celery_beat/models.py:513
+#: django_celery_beat/models.py:527
 msgid "Last Run Datetime"
 msgstr "최종 작동 일시"
 
-#: django_celery_beat/models.py:515
+#: django_celery_beat/models.py:529
 msgid ""
 "Datetime that the schedule last triggered the task to run. Reset to None if "
 "enabled is set to False."
@@ -464,35 +491,35 @@ msgstr ""
 "태스크가 최종적으로 작동한 시간. 만약 테스크가 비활성화 된 경우 None 으로 지"
 "정됩니다."
 
-#: django_celery_beat/models.py:520
+#: django_celery_beat/models.py:534
 msgid "Total Run Count"
 msgstr "실행 횟수"
 
-#: django_celery_beat/models.py:522
+#: django_celery_beat/models.py:536
 msgid "Running count of how many times the schedule has triggered the task"
 msgstr "태스크의 실행 횟수"
 
-#: django_celery_beat/models.py:527
+#: django_celery_beat/models.py:541
 msgid "Last Modified"
 msgstr "최종 변경 일시"
 
-#: django_celery_beat/models.py:528
+#: django_celery_beat/models.py:542
 msgid "Datetime that this PeriodicTask was last modified"
 msgstr "태스크가 최종적으로 변경된 일시"
 
-#: django_celery_beat/models.py:532
+#: django_celery_beat/models.py:546
 msgid "Description"
 msgstr "설명"
 
-#: django_celery_beat/models.py:534
+#: django_celery_beat/models.py:548
 msgid "Detailed description about the details of this Periodic Task"
 msgstr "태스크에 대한 상세 설명을 작성합니다."
 
-#: django_celery_beat/models.py:543
+#: django_celery_beat/models.py:557
 msgid "periodic task"
 msgstr "periodic task"
 
-#: django_celery_beat/models.py:544
+#: django_celery_beat/models.py:558
 msgid "periodic tasks"
 msgstr "periodic tasks"
 
diff --git a/django_celery_beat/locale/ru/LC_MESSAGES/django.mo b/django_celery_beat/locale/ru/LC_MESSAGES/django.mo
index a3b2f47..f2266f2 100644
Binary files a/django_celery_beat/locale/ru/LC_MESSAGES/django.mo and b/django_celery_beat/locale/ru/LC_MESSAGES/django.mo differ
diff --git a/django_celery_beat/locale/ru/LC_MESSAGES/django.po b/django_celery_beat/locale/ru/LC_MESSAGES/django.po
index 05232c6..626e6d5 100644
--- a/django_celery_beat/locale/ru/LC_MESSAGES/django.po
+++ b/django_celery_beat/locale/ru/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 1.5.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-06-14 17:06+1000\n"
+"POT-Creation-Date: 2022-12-22 19:03+0000\n"
 "PO-Revision-Date: 2022-10-14 23:48+0200\n"
 "Last-Translator: Daniil Kharkov <fadeddexofan@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,83 +15,104 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
-"%100>=11 && n%100<=14)? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
 
-#: django_celery_beat/admin.py:71
+#: django_celery_beat/admin.py:60
 msgid "Task (registered)"
 msgstr "Задача (зарегистрированные)"
 
-#: django_celery_beat/admin.py:75
+#: django_celery_beat/admin.py:64
 msgid "Task (custom)"
 msgstr "Задача (пользовательская)"
 
-#: django_celery_beat/admin.py:92
+#: django_celery_beat/admin.py:81
 msgid "Need name of task"
 msgstr "Укажите название задачи"
 
-#: django_celery_beat/admin.py:103
+#: django_celery_beat/admin.py:87 django_celery_beat/models.py:605
+msgid "Only one can be set, in expires and expire_seconds"
+msgstr ""
+
+#: django_celery_beat/admin.py:97
 #, python-format
 msgid "Unable to parse JSON: %s"
 msgstr "Невозможно проанализировать JSON: %s"
 
-#: django_celery_beat/admin.py:165
+#: django_celery_beat/admin.py:125
+#, fuzzy
+#| msgid "Solar Schedule"
+msgid "Schedule"
+msgstr "Астрономическое"
+
+#: django_celery_beat/admin.py:130
+#, fuzzy
+#| msgid "Keyword Arguments"
+msgid "Arguments"
+msgstr "Именованные аргументы"
+
+#: django_celery_beat/admin.py:134
+msgid "Execution Options"
+msgstr ""
+
+#: django_celery_beat/admin.py:177
 #, python-brace-format
 msgid "{0} task{1} {2} successfully {3}"
 msgstr "{0} задача {1} {2} успешно {3}"
 
-#: django_celery_beat/admin.py:168 django_celery_beat/admin.py:230
+#: django_celery_beat/admin.py:180 django_celery_beat/admin.py:247
 msgid "was,were"
 msgstr "был, были"
 
-#: django_celery_beat/admin.py:177
+#: django_celery_beat/admin.py:189
 msgid "Enable selected tasks"
 msgstr "Включить выбранные задачи"
 
-#: django_celery_beat/admin.py:183
+#: django_celery_beat/admin.py:195
 msgid "Disable selected tasks"
 msgstr "Выключить выбранные задачи"
 
-#: django_celery_beat/admin.py:195
+#: django_celery_beat/admin.py:207
 msgid "Toggle activity of selected tasks"
 msgstr "Переключить активность выбранных задач"
 
-#: django_celery_beat/admin.py:215
-#, python-brace-format
-msgid "task \"{0}\" not found"
+#: django_celery_beat/admin.py:228
+#, fuzzy, python-brace-format
+#| msgid "task \"{0}\" not found"
+msgid "task \"{not_found_task_name}\" not found"
 msgstr "задача \"{0}\" не найдена"
 
-#: django_celery_beat/admin.py:227
+#: django_celery_beat/admin.py:244
 #, python-brace-format
 msgid "{0} task{1} {2} successfully run"
 msgstr "{0} задача{1} {2} успешно выполнена"
 
-#: django_celery_beat/admin.py:233
+#: django_celery_beat/admin.py:250
 msgid "Run selected tasks"
 msgstr "Запустить выбранные задачи"
 
-#: django_celery_beat/apps.py:15
+#: django_celery_beat/apps.py:13
 msgid "Periodic Tasks"
 msgstr "Периодические Задачи"
 
-#: django_celery_beat/models.py:29
+#: django_celery_beat/models.py:30
 msgid "Days"
 msgstr "Дни"
 
-#: django_celery_beat/models.py:30
+#: django_celery_beat/models.py:31
 msgid "Hours"
 msgstr "Часы"
 
-#: django_celery_beat/models.py:31
+#: django_celery_beat/models.py:32
 msgid "Minutes"
 msgstr "Минуты"
 
-#: django_celery_beat/models.py:32
+#: django_celery_beat/models.py:33
 msgid "Seconds"
 msgstr "Секунды"
 
-#: django_celery_beat/models.py:33
+#: django_celery_beat/models.py:34
 msgid "Microseconds"
 msgstr "Микросекунды"
 
@@ -115,328 +136,403 @@ msgstr "Секунды"
 msgid "Microsecond"
 msgstr "Микросекунды"
 
+#: django_celery_beat/models.py:46
+msgid "Astronomical dawn"
+msgstr ""
+
+#: django_celery_beat/models.py:47
+msgid "Civil dawn"
+msgstr ""
+
+#: django_celery_beat/models.py:48
+msgid "Nautical dawn"
+msgstr ""
+
+#: django_celery_beat/models.py:49
+msgid "Astronomical dusk"
+msgstr ""
+
+#: django_celery_beat/models.py:50
+msgid "Civil dusk"
+msgstr ""
+
+#: django_celery_beat/models.py:51
+msgid "Nautical dusk"
+msgstr ""
+
+#: django_celery_beat/models.py:52
+#, fuzzy
+#| msgid "Solar Event"
+msgid "Solar noon"
+msgstr "Астрономическое"
+
+#: django_celery_beat/models.py:53
+msgid "Sunrise"
+msgstr ""
+
 #: django_celery_beat/models.py:54
+msgid "Sunset"
+msgstr ""
+
+#: django_celery_beat/models.py:88
 msgid "Solar Event"
 msgstr "Астрономическое"
 
-#: django_celery_beat/models.py:55
+#: django_celery_beat/models.py:89
 msgid "The type of solar event when the job should run"
 msgstr "Тип астрономического события для запуска задачи"
 
-#: django_celery_beat/models.py:59
+#: django_celery_beat/models.py:93
 msgid "Latitude"
 msgstr "Широта"
 
-#: django_celery_beat/models.py:60
+#: django_celery_beat/models.py:94
 msgid "Run the task when the event happens at this latitude"
 msgstr "Запуск задачи, когда событие происходит на данной широте"
 
-#: django_celery_beat/models.py:65
+#: django_celery_beat/models.py:99
 msgid "Longitude"
 msgstr "Долгота"
 
-#: django_celery_beat/models.py:66
+#: django_celery_beat/models.py:100
 msgid "Run the task when the event happens at this longitude"
 msgstr "Запуск задачи, когда событие происходит на данной долготе"
 
-#: django_celery_beat/models.py:73
+#: django_celery_beat/models.py:107
 msgid "solar event"
 msgstr "астрономическое событие"
 
-#: django_celery_beat/models.py:74
+#: django_celery_beat/models.py:108
 msgid "solar events"
 msgstr "астрономические события"
 
-#: django_celery_beat/models.py:124
+#: django_celery_beat/models.py:158
 msgid "Number of Periods"
 msgstr "Число периодов"
 
-#: django_celery_beat/models.py:125
+#: django_celery_beat/models.py:159
 msgid "Number of interval periods to wait before running the task again"
 msgstr "Количество периодов интервала перед новым запуском задачи"
 
-#: django_celery_beat/models.py:131
+#: django_celery_beat/models.py:165
 msgid "Interval Period"
 msgstr "Интервальный период"
 
-#: django_celery_beat/models.py:132
+#: django_celery_beat/models.py:166
 msgid "The type of period between task runs (Example: days)"
 msgstr "Тип периода между запусками задачи (Например: дни)"
 
-#: django_celery_beat/models.py:138
+#: django_celery_beat/models.py:172
 msgid "interval"
 msgstr "интервал"
 
-#: django_celery_beat/models.py:139
+#: django_celery_beat/models.py:173
 msgid "intervals"
 msgstr "интервалы"
 
-#: django_celery_beat/models.py:162
-#, python-brace-format
+#: django_celery_beat/models.py:200
 msgid "every {}"
 msgstr "каждые {}"
 
-#: django_celery_beat/models.py:163
-#, python-brace-format
+#: django_celery_beat/models.py:205
 msgid "every {} {}"
 msgstr "каждые {} {}"
 
-#: django_celery_beat/models.py:175
+#: django_celery_beat/models.py:216
 msgid "Clock Time"
 msgstr "Время"
 
-#: django_celery_beat/models.py:176
+#: django_celery_beat/models.py:217
 msgid "Run the task at clocked time"
 msgstr "Запуск задачи в указанное время"
 
-#: django_celery_beat/models.py:181 django_celery_beat/models.py:475
-msgid "Enabled"
-msgstr "Активна"
-
-#: django_celery_beat/models.py:182 django_celery_beat/models.py:476
-msgid "Set to False to disable the schedule"
-msgstr "Выключите для отключения расписания"
-
-#: django_celery_beat/models.py:188 django_celery_beat/models.py:189
+#: django_celery_beat/models.py:223 django_celery_beat/models.py:224
 msgid "clocked"
 msgstr "время"
 
-#: django_celery_beat/models.py:232
+#: django_celery_beat/models.py:264
 msgid "Minute(s)"
 msgstr "Минуты"
 
-#: django_celery_beat/models.py:234
+#: django_celery_beat/models.py:266
 msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")"
 msgstr "Cron минуты. Используйте \"*\" для \"каждую\". (Например: \"0,30\")"
 
-#: django_celery_beat/models.py:239
+#: django_celery_beat/models.py:271
 msgid "Hour(s)"
 msgstr "Часы"
 
-#: django_celery_beat/models.py:241
+#: django_celery_beat/models.py:273
 msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")"
 msgstr "Cron часы. Используйте \"*\" для \"каждый\". (Например: \"8,20\")"
 
-#: django_celery_beat/models.py:246
+#: django_celery_beat/models.py:278
 msgid "Day(s) Of The Week"
 msgstr "Дни недели"
 
-#: django_celery_beat/models.py:248
-msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+#: django_celery_beat/models.py:280
+#, fuzzy
+#| msgid ""
+#| "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+msgid ""
+"Cron Days Of The Week to Run. Use \"*\" for \"all\", Sunday is 0 or 7, "
+"Monday is 1. (Example: \"0,5\")"
 msgstr "Cron дни недели. Используйте \"*\" для \"каждый\". (Например: \"0,5\")"
 
-#: django_celery_beat/models.py:254
+#: django_celery_beat/models.py:286
 msgid "Day(s) Of The Month"
 msgstr "Дни"
 
-#: django_celery_beat/models.py:256
-msgid "Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")"
+#: django_celery_beat/models.py:288
+msgid ""
+"Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")"
 msgstr "Cron дни. Используйте \"*\" для \"каждый\". (Например: \"1,15\")"
 
-#: django_celery_beat/models.py:262
+#: django_celery_beat/models.py:294
 msgid "Month(s) Of The Year"
 msgstr "Месяцы"
 
-#: django_celery_beat/models.py:264
-msgid "Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
+#: django_celery_beat/models.py:296
+#, fuzzy
+#| msgid ""
+#| "Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
+msgid ""
+"Cron Months (1-12) Of The Year to Run. Use \"*\" for \"all\". (Example: "
+"\"1,12\")"
 msgstr "Cron месяцы. Используйте \"*\" для \"каждый\". (Например: \"0,6\")"
 
-#: django_celery_beat/models.py:271
+#: django_celery_beat/models.py:304
 msgid "Cron Timezone"
 msgstr "Временная зона для Cron"
 
-#: django_celery_beat/models.py:273
+#: django_celery_beat/models.py:306
 msgid "Timezone to Run the Cron Schedule on. Default is UTC."
 msgstr "Временная зона для Cron расписания. UTC по умолчанию."
 
-#: django_celery_beat/models.py:279
+#: django_celery_beat/models.py:312
 msgid "crontab"
 msgstr "crontab"
 
-#: django_celery_beat/models.py:280
+#: django_celery_beat/models.py:313
 msgid "crontabs"
 msgstr "crontab"
 
-#: django_celery_beat/models.py:366
+#: django_celery_beat/models.py:404
 msgid "Name"
 msgstr "Название"
 
-#: django_celery_beat/models.py:367
+#: django_celery_beat/models.py:405
 msgid "Short Description For This Task"
 msgstr "Краткое описание для этой задачи"
 
-#: django_celery_beat/models.py:372
+#: django_celery_beat/models.py:410
 msgid ""
-"The Name of the Celery Task that Should be Run.  (Example: \"proj.tasks.import_contacts"
-"\")"
-msgstr "Имя запускаемой Celery задачи.  (Например: \"proj.tasks.import_contacts\")"
+"The Name of the Celery Task that Should be Run.  (Example: \"proj.tasks."
+"import_contacts\")"
+msgstr ""
+"Имя запускаемой Celery задачи.  (Например: \"proj.tasks.import_contacts\")"
 
-#: django_celery_beat/models.py:380
+#: django_celery_beat/models.py:418
 msgid "Interval Schedule"
 msgstr "Интервал"
 
-#: django_celery_beat/models.py:381
+#: django_celery_beat/models.py:419
 msgid ""
-"Interval Schedule to run the task on.  Set only one schedule type, leave the others null."
+"Interval Schedule to run the task on.  Set only one schedule type, leave the "
+"others null."
 msgstr ""
-"Интервальное расписание для запуска задачи. Выберите только один тип расписания, "
-"остальные оставьте пустыми."
+"Интервальное расписание для запуска задачи. Выберите только один тип "
+"расписания, остальные оставьте пустыми."
 
-#: django_celery_beat/models.py:386
+#: django_celery_beat/models.py:424
 msgid "Crontab Schedule"
 msgstr "Crontab"
 
-#: django_celery_beat/models.py:387
+#: django_celery_beat/models.py:425
 msgid ""
-"Crontab Schedule to run the task on.  Set only one schedule type, leave the others null."
+"Crontab Schedule to run the task on.  Set only one schedule type, leave the "
+"others null."
 msgstr ""
-"Crontab расписание для запуска задачи. Выберите только один тип расписания, остальные "
-"оставьте пустыми."
+"Crontab расписание для запуска задачи. Выберите только один тип расписания, "
+"остальные оставьте пустыми."
 
-#: django_celery_beat/models.py:392
+#: django_celery_beat/models.py:430
 msgid "Solar Schedule"
 msgstr "Астрономическое"
 
-#: django_celery_beat/models.py:393
+#: django_celery_beat/models.py:431
 msgid ""
-"Solar Schedule to run the task on.  Set only one schedule type, leave the others null."
+"Solar Schedule to run the task on.  Set only one schedule type, leave the "
+"others null."
 msgstr ""
-"Астрономическое расписание для запуска задачи. Выберите только один тип расписания, "
-"остальные оставьте пустыми."
+"Астрономическое расписание для запуска задачи. Выберите только один тип "
+"расписания, остальные оставьте пустыми."
 
-#: django_celery_beat/models.py:398
+#: django_celery_beat/models.py:436
 msgid "Clocked Schedule"
 msgstr "Хронометрическое"
 
-#: django_celery_beat/models.py:399
+#: django_celery_beat/models.py:437
 msgid ""
-"Clocked Schedule to run the task on.  Set only one schedule type, leave the others null."
+"Clocked Schedule to run the task on.  Set only one schedule type, leave the "
+"others null."
 msgstr ""
-"Хронометрическое расписание для запуска задачи. Выберите только один тип расписания, "
-"остальные оставьте пустыми."
+"Хронометрическое расписание для запуска задачи. Выберите только один тип "
+"расписания, остальные оставьте пустыми."
 
-#: django_celery_beat/models.py:405
+#: django_celery_beat/models.py:443
 msgid "Positional Arguments"
 msgstr "Позиционные аргументы"
 
-#: django_celery_beat/models.py:407
+#: django_celery_beat/models.py:445
 msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])"
-msgstr "Закодированные в JSON позиционные аргументы (Например: [\"arg1\", \"arg2\"])"
+msgstr ""
+"Закодированные в JSON позиционные аргументы (Например: [\"arg1\", \"arg2\"])"
 
-#: django_celery_beat/models.py:412
+#: django_celery_beat/models.py:450
 msgid "Keyword Arguments"
 msgstr "Именованные аргументы"
 
-#: django_celery_beat/models.py:414
+#: django_celery_beat/models.py:452
 msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})"
-msgstr "Закодированные в JSON именованные аргументы (Например: {\"argument\": \"value\"})"
+msgstr ""
+"Закодированные в JSON именованные аргументы (Например: {\"argument\": "
+"\"value\"})"
 
-#: django_celery_beat/models.py:420
+#: django_celery_beat/models.py:458
 msgid "Queue Override"
 msgstr "Переопределение очереди"
 
-#: django_celery_beat/models.py:422
+#: django_celery_beat/models.py:460
 msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing."
-msgstr "Очередь задана в CELERY_TASK_QUEUES. Оставьте None для стандартного распределения."
+msgstr ""
+"Очередь задана в CELERY_TASK_QUEUES. Оставьте None для стандартного "
+"распределения."
 
-#: django_celery_beat/models.py:431
+#: django_celery_beat/models.py:469
 msgid "Exchange"
 msgstr "Exchange"
 
-#: django_celery_beat/models.py:432
+#: django_celery_beat/models.py:470
 msgid "Override Exchange for low-level AMQP routing"
 msgstr "Override Exchange for low-level AMQP routing"
 
-#: django_celery_beat/models.py:436
+#: django_celery_beat/models.py:474
 msgid "Routing Key"
 msgstr "Ключ маршрутизации"
 
-#: django_celery_beat/models.py:437
+#: django_celery_beat/models.py:475
 msgid "Override Routing Key for low-level AMQP routing"
 msgstr "Override Routing Key for low-level AMQP routing"
 
-#: django_celery_beat/models.py:441
+#: django_celery_beat/models.py:479
 msgid "AMQP Message Headers"
 msgstr "Заголовки сообщения AMQP"
 
-#: django_celery_beat/models.py:442
+#: django_celery_beat/models.py:480
 msgid "JSON encoded message headers for the AMQP message."
 msgstr "Закодированные в JSON заголовки для AMQP сообщения."
 
-#: django_celery_beat/models.py:448
+#: django_celery_beat/models.py:486
 msgid "Priority"
 msgstr "Приоритет"
 
-#: django_celery_beat/models.py:450
+#: django_celery_beat/models.py:488
 msgid ""
-"Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority reversed, 0 "
-"is highest)."
+"Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority "
+"reversed, 0 is highest)."
 msgstr ""
-"Число между 0 и 255. Поддерживается в: RabbitMQ, Redis (приоритет по убыванию, 0 "
-"наивысший)."
+"Число между 0 и 255. Поддерживается в: RabbitMQ, Redis (приоритет по "
+"убыванию, 0 наивысший)."
 
-#: django_celery_beat/models.py:455
+#: django_celery_beat/models.py:493
 msgid "Expires Datetime"
 msgstr "Истекает"
 
-#: django_celery_beat/models.py:457
-msgid "Datetime after which the schedule will no longer trigger the task to run"
+#: django_celery_beat/models.py:495
+msgid ""
+"Datetime after which the schedule will no longer trigger the task to run"
 msgstr "Время, после которого расписание больше не будет запускать задачу"
 
-#: django_celery_beat/models.py:462
+#: django_celery_beat/models.py:500
+msgid "Expires timedelta with seconds"
+msgstr ""
+
+#: django_celery_beat/models.py:502
+#, fuzzy
+#| msgid ""
+#| "Datetime after which the schedule will no longer trigger the task to run"
+msgid ""
+"Timedelta with seconds which the schedule will no longer trigger the task to "
+"run"
+msgstr "Время, после которого расписание больше не будет запускать задачу"
+
+#: django_celery_beat/models.py:508
 msgid "One-off Task"
 msgstr "Одноразовая задача"
 
-#: django_celery_beat/models.py:464
+#: django_celery_beat/models.py:510
 msgid "If True, the schedule will only run the task a single time"
 msgstr "Если включено, то задача будет запущена только один раз"
 
-#: django_celery_beat/models.py:468
+#: django_celery_beat/models.py:514
 msgid "Start Datetime"
 msgstr "Время начала"
 
-#: django_celery_beat/models.py:470
+#: django_celery_beat/models.py:516
 msgid "Datetime when the schedule should begin triggering the task to run"
 msgstr "Время начала вызовов задачи расписанием"
 
-#: django_celery_beat/models.py:481
+#: django_celery_beat/models.py:521
+msgid "Enabled"
+msgstr "Активна"
+
+#: django_celery_beat/models.py:522
+msgid "Set to False to disable the schedule"
+msgstr "Выключите для отключения расписания"
+
+#: django_celery_beat/models.py:527
 msgid "Last Run Datetime"
 msgstr "Последний запуск"
 
-#: django_celery_beat/models.py:483
+#: django_celery_beat/models.py:529
 msgid ""
-"Datetime that the schedule last triggered the task to run. Reset to None if enabled is "
-"set to False."
+"Datetime that the schedule last triggered the task to run. Reset to None if "
+"enabled is set to False."
 msgstr "Время последнего вызова задачи. None если задача выключена."
 
-#: django_celery_beat/models.py:488
+#: django_celery_beat/models.py:534
 msgid "Total Run Count"
 msgstr "Запусков всего"
 
-#: django_celery_beat/models.py:490
+#: django_celery_beat/models.py:536
 msgid "Running count of how many times the schedule has triggered the task"
 msgstr "Количество запусков задачи этим расписанием"
 
-#: django_celery_beat/models.py:495
+#: django_celery_beat/models.py:541
 msgid "Last Modified"
 msgstr "Последнее изменение"
 
-#: django_celery_beat/models.py:496
+#: django_celery_beat/models.py:542
 msgid "Datetime that this PeriodicTask was last modified"
 msgstr "Время последнего изменения этой задачи"
 
-#: django_celery_beat/models.py:500
+#: django_celery_beat/models.py:546
 msgid "Description"
 msgstr "Описание"
 
-#: django_celery_beat/models.py:502
+#: django_celery_beat/models.py:548
 msgid "Detailed description about the details of this Periodic Task"
 msgstr "Подробное описание того, что делает эта задача"
 
-#: django_celery_beat/models.py:511
+#: django_celery_beat/models.py:557
 msgid "periodic task"
 msgstr "периодическая задача"
 
-#: django_celery_beat/models.py:512
+#: django_celery_beat/models.py:558
 msgid "periodic tasks"
 msgstr "периодические задачи"
+
+#: django_celery_beat/templates/admin/djcelery/change_list.html:6
+msgid "Home"
+msgstr ""
diff --git a/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.mo b/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.mo
index 7fd2939..2a9b57b 100644
Binary files a/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.mo and b/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.mo differ
diff --git a/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.po b/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.po
index 8c2f73c..8891af6 100644
--- a/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/django_celery_beat/locale/zh_Hans/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-19 00:36+0800\n"
+"POT-Creation-Date: 2022-12-22 19:03+0000\n"
 "PO-Revision-Date: 2022-10-14 23:48+0200\n"
 "Last-Translator: Rainshaw <rxg@live.com>\n"
 "Language-Team: x_zhuo <LL@li.org>\n"
@@ -17,470 +17,500 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: .\django_celery_beat\admin.py:64
+#: django_celery_beat/admin.py:60
 msgid "Task (registered)"
 msgstr "任务 (已注册的)"
 
-#: .\django_celery_beat\admin.py:68
+#: django_celery_beat/admin.py:64
 msgid "Task (custom)"
 msgstr "任务 (自定义)"
 
-#: .\django_celery_beat\admin.py:85
+#: django_celery_beat/admin.py:81
 msgid "Need name of task"
 msgstr "任务需要一个名称"
 
-#: .\django_celery_beat\admin.py:91 .\django_celery_beat\models.py:589
+#: django_celery_beat/admin.py:87 django_celery_beat/models.py:605
 msgid "Only one can be set, in expires and expire_seconds"
 msgstr "不可以同时设置 expires 和 expire_seconds 字段"
 
-#: .\django_celery_beat\admin.py:101
+#: django_celery_beat/admin.py:97
 #, python-format
 msgid "Unable to parse JSON: %s"
 msgstr "无法解析 JSON: %s"
 
-#: .\django_celery_beat\admin.py:167
+#: django_celery_beat/admin.py:125
+#, fuzzy
+#| msgid "Solar Schedule"
+msgid "Schedule"
+msgstr "日程时间表"
+
+#: django_celery_beat/admin.py:130
+#, fuzzy
+#| msgid "Keyword Arguments"
+msgid "Arguments"
+msgstr "关键字参数"
+
+#: django_celery_beat/admin.py:134
+msgid "Execution Options"
+msgstr ""
+
+#: django_celery_beat/admin.py:177
 #, python-brace-format
 msgid "{0} task{1} {2} successfully {3}"
 msgstr "{0} 任务{1} {2} 成功 {3}"
 
-#: .\django_celery_beat\admin.py:170 .\django_celery_beat\admin.py:232
+#: django_celery_beat/admin.py:180 django_celery_beat/admin.py:247
 msgid "was,were"
 msgstr "将"
 
-#: .\django_celery_beat\admin.py:179
+#: django_celery_beat/admin.py:189
 msgid "Enable selected tasks"
 msgstr "启用选中的任务"
 
-#: .\django_celery_beat\admin.py:185
+#: django_celery_beat/admin.py:195
 msgid "Disable selected tasks"
 msgstr "禁用选中的任务"
 
-#: .\django_celery_beat\admin.py:197
+#: django_celery_beat/admin.py:207
 msgid "Toggle activity of selected tasks"
 msgstr "切换选中的任务"
 
-#: .\django_celery_beat\admin.py:217
-#, python-brace-format
-msgid "task \"{0}\" not found"
+#: django_celery_beat/admin.py:228
+#, fuzzy, python-brace-format
+#| msgid "task \"{0}\" not found"
+msgid "task \"{not_found_task_name}\" not found"
 msgstr "未找到\"{0}\"任务"
 
-#: .\django_celery_beat\admin.py:229
+#: django_celery_beat/admin.py:244
 #, python-brace-format
 msgid "{0} task{1} {2} successfully run"
 msgstr "{0} 任务{1} {2} 启动成功"
 
-#: .\django_celery_beat\admin.py:235
+#: django_celery_beat/admin.py:250
 msgid "Run selected tasks"
 msgstr "运行选中的任务"
 
-#: .\django_celery_beat\apps.py:13
+#: django_celery_beat/apps.py:13
 msgid "Periodic Tasks"
 msgstr "周期任务"
 
-#: .\django_celery_beat\models.py:26
+#: django_celery_beat/models.py:30
 msgid "Days"
 msgstr "天"
 
-#: .\django_celery_beat\models.py:27
+#: django_celery_beat/models.py:31
 msgid "Hours"
 msgstr "小时"
 
-#: .\django_celery_beat\models.py:28
+#: django_celery_beat/models.py:32
 msgid "Minutes"
 msgstr "分钟"
 
-#: .\django_celery_beat\models.py:29
+#: django_celery_beat/models.py:33
 msgid "Seconds"
 msgstr "秒"
 
-#: .\django_celery_beat\models.py:30
+#: django_celery_beat/models.py:34
 msgid "Microseconds"
 msgstr "毫秒"
 
-#: .\django_celery_beat\models.py:34
+#: django_celery_beat/models.py:38
 msgid "Day"
 msgstr "天"
 
-#: .\django_celery_beat\models.py:35
+#: django_celery_beat/models.py:39
 msgid "Hour"
 msgstr "小时"
 
-#: .\django_celery_beat\models.py:36
+#: django_celery_beat/models.py:40
 msgid "Minute"
 msgstr "分钟"
 
-#: .\django_celery_beat\models.py:37
+#: django_celery_beat/models.py:41
 msgid "Second"
 msgstr "秒"
 
-#: .\django_celery_beat\models.py:38
+#: django_celery_beat/models.py:42
 msgid "Microsecond"
 msgstr "毫秒"
 
-#: .\django_celery_beat\models.py:42
+#: django_celery_beat/models.py:46
 msgid "Astronomical dawn"
 msgstr "天文黎明"
 
-#: .\django_celery_beat\models.py:43
+#: django_celery_beat/models.py:47
 msgid "Civil dawn"
 msgstr "民事黎明"
 
-#: .\django_celery_beat\models.py:44
+#: django_celery_beat/models.py:48
 msgid "Nautical dawn"
 msgstr "航海黎明"
 
-#: .\django_celery_beat\models.py:45
+#: django_celery_beat/models.py:49
 msgid "Astronomical dusk"
 msgstr "天文黄昏"
 
-#: .\django_celery_beat\models.py:46
+#: django_celery_beat/models.py:50
 msgid "Civil dusk"
 msgstr "民事黄昏"
 
-#: .\django_celery_beat\models.py:47
+#: django_celery_beat/models.py:51
 msgid "Nautical dusk"
 msgstr "航海黄昏"
 
-#: .\django_celery_beat\models.py:48
+#: django_celery_beat/models.py:52
 msgid "Solar noon"
 msgstr "正午"
 
-#: .\django_celery_beat\models.py:49
+#: django_celery_beat/models.py:53
 msgid "Sunrise"
 msgstr "日出"
 
-#: .\django_celery_beat\models.py:50
+#: django_celery_beat/models.py:54
 msgid "Sunset"
 msgstr "日落"
 
-#: .\django_celery_beat\models.py:84
+#: django_celery_beat/models.py:88
 msgid "Solar Event"
 msgstr "日程事件"
 
-#: .\django_celery_beat\models.py:85
+#: django_celery_beat/models.py:89
 msgid "The type of solar event when the job should run"
 msgstr "当任务应该执行时的日程事件类型"
 
-#: .\django_celery_beat\models.py:89
+#: django_celery_beat/models.py:93
 msgid "Latitude"
 msgstr "纬度"
 
-#: .\django_celery_beat\models.py:90
+#: django_celery_beat/models.py:94
 msgid "Run the task when the event happens at this latitude"
 msgstr "当在此纬度发生事件时执行任务"
 
-#: .\django_celery_beat\models.py:95
+#: django_celery_beat/models.py:99
 msgid "Longitude"
 msgstr "经度"
 
-#: .\django_celery_beat\models.py:96
+#: django_celery_beat/models.py:100
 msgid "Run the task when the event happens at this longitude"
 msgstr "当在此经度发生事件时执行任务"
 
-#: .\django_celery_beat\models.py:103
+#: django_celery_beat/models.py:107
 msgid "solar event"
 msgstr "日程事件"
 
-#: .\django_celery_beat\models.py:104
+#: django_celery_beat/models.py:108
 msgid "solar events"
 msgstr "日程事件"
 
-#: .\django_celery_beat\models.py:153
+#: django_celery_beat/models.py:158
 msgid "Number of Periods"
 msgstr "周期数"
 
-#: .\django_celery_beat\models.py:154
+#: django_celery_beat/models.py:159
 msgid "Number of interval periods to wait before running the task again"
 msgstr "再次执行任务之前要等待的间隔周期数"
 
-#: .\django_celery_beat\models.py:160
+#: django_celery_beat/models.py:165
 msgid "Interval Period"
 msgstr "间隔周期"
 
-#: .\django_celery_beat\models.py:161
+#: django_celery_beat/models.py:166
 msgid "The type of period between task runs (Example: days)"
 msgstr "任务每次执行之间的时间间隔类型(例如:天)"
 
-#: .\django_celery_beat\models.py:167
+#: django_celery_beat/models.py:172
 msgid "interval"
 msgstr "间隔"
 
-#: .\django_celery_beat\models.py:168
+#: django_celery_beat/models.py:173
 msgid "intervals"
 msgstr "间隔"
 
-#: .\django_celery_beat\models.py:196
+#: django_celery_beat/models.py:200
 msgid "every {}"
 msgstr "每 {}"
 
-#: .\django_celery_beat\models.py:201
+#: django_celery_beat/models.py:205
 msgid "every {} {}"
 msgstr "每 {} {}"
 
-#: .\django_celery_beat\models.py:212
+#: django_celery_beat/models.py:216
 msgid "Clock Time"
 msgstr "定时时间"
 
-#: .\django_celery_beat\models.py:213
+#: django_celery_beat/models.py:217
 msgid "Run the task at clocked time"
 msgstr "在定时时间执行任务"
 
-#: .\django_celery_beat\models.py:219 .\django_celery_beat\models.py:220
+#: django_celery_beat/models.py:223 django_celery_beat/models.py:224
 msgid "clocked"
 msgstr "定时"
 
-#: .\django_celery_beat\models.py:260
+#: django_celery_beat/models.py:264
 msgid "Minute(s)"
 msgstr "分钟"
 
-#: .\django_celery_beat\models.py:262
+#: django_celery_beat/models.py:266
 msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")"
 msgstr "计划执行的分钟。 将\"*\"用作\"all\"。(例如:\"0,30\")"
 
-#: .\django_celery_beat\models.py:267
+#: django_celery_beat/models.py:271
 msgid "Hour(s)"
 msgstr "小时"
 
-#: .\django_celery_beat\models.py:269
+#: django_celery_beat/models.py:273
 msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")"
 msgstr "计划执行的小时。 将\"*\"用作\"all\"。(例如:\"8,20\")"
 
-#: .\django_celery_beat\models.py:274
+#: django_celery_beat/models.py:278
 msgid "Day(s) Of The Week"
 msgstr "一个星期的第几天"
 
-#: .\django_celery_beat\models.py:276
-msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+#: django_celery_beat/models.py:280
+#, fuzzy
+#| msgid ""
+#| "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")"
+msgid ""
+"Cron Days Of The Week to Run. Use \"*\" for \"all\", Sunday is 0 or 7, "
+"Monday is 1. (Example: \"0,5\")"
 msgstr "计划执行的每周的第几天。将\"*\"用作\"all\"。(例如:\"0,5\")"
 
-#: .\django_celery_beat\models.py:282
+#: django_celery_beat/models.py:286
 msgid "Day(s) Of The Month"
 msgstr "一个月的第几天"
 
-#: .\django_celery_beat\models.py:284
+#: django_celery_beat/models.py:288
 msgid ""
 "Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")"
 msgstr "计划执行的每个月的第几天。将\"*\"用作\"all\"。(例如:\"0,5\")"
 
-#: .\django_celery_beat\models.py:290
+#: django_celery_beat/models.py:294
 msgid "Month(s) Of The Year"
 msgstr "一年的第几个月"
 
-#: .\django_celery_beat\models.py:292
+#: django_celery_beat/models.py:296
+#, fuzzy
+#| msgid ""
+#| "Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
 msgid ""
-"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")"
+"Cron Months (1-12) Of The Year to Run. Use \"*\" for \"all\". (Example: "
+"\"1,12\")"
 msgstr "计划执行的每一年的第几个月。将\"*\"用作\"all\"。(例如:\"0,5\")"
 
-#: .\django_celery_beat\models.py:299
+#: django_celery_beat/models.py:304
 msgid "Cron Timezone"
 msgstr "计划任务的时区"
 
-#: .\django_celery_beat\models.py:301
+#: django_celery_beat/models.py:306
 msgid "Timezone to Run the Cron Schedule on. Default is UTC."
 msgstr "执行计划任务表的时区。 默认为UTC。"
 
-#: .\django_celery_beat\models.py:307
+#: django_celery_beat/models.py:312
 msgid "crontab"
 msgstr "计划任务"
 
-#: .\django_celery_beat\models.py:308
+#: django_celery_beat/models.py:313
 msgid "crontabs"
 msgstr "计划任务"
 
-#: .\django_celery_beat\models.py:393
+#: django_celery_beat/models.py:404
 msgid "Name"
 msgstr "任务名"
 
-#: .\django_celery_beat\models.py:394
+#: django_celery_beat/models.py:405
 msgid "Short Description For This Task"
 msgstr "该任务的简短说明"
 
-#: .\django_celery_beat\models.py:399
+#: django_celery_beat/models.py:410
 msgid ""
 "The Name of the Celery Task that Should be Run.  (Example: \"proj.tasks."
 "import_contacts\")"
 msgstr "被执行的任务的名称。(例如:\"proj.tasks.import_contacts\")"
 
-#: .\django_celery_beat\models.py:407
+#: django_celery_beat/models.py:418
 msgid "Interval Schedule"
 msgstr "间隔时间表"
 
-#: .\django_celery_beat\models.py:408
+#: django_celery_beat/models.py:419
 msgid ""
 "Interval Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
 msgstr "执行任务的间隔时间表。 仅设置一种时间表类型,将其他保留为空。"
 
-#: .\django_celery_beat\models.py:413
+#: django_celery_beat/models.py:424
 msgid "Crontab Schedule"
 msgstr "计划时间表"
 
-#: .\django_celery_beat\models.py:414
+#: django_celery_beat/models.py:425
 msgid ""
 "Crontab Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
 msgstr "执行任务的计划时间表。 仅设置一种时间表类型,将其他保留为空。"
 
-#: .\django_celery_beat\models.py:419
+#: django_celery_beat/models.py:430
 msgid "Solar Schedule"
 msgstr "日程时间表"
 
-#: .\django_celery_beat\models.py:420
+#: django_celery_beat/models.py:431
 msgid ""
 "Solar Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
 msgstr "执行任务的日程时间表。 仅设置一种时间表类型,将其他保留为空。"
 
-#: .\django_celery_beat\models.py:425
+#: django_celery_beat/models.py:436
 msgid "Clocked Schedule"
 msgstr "定时时间表"
 
-#: .\django_celery_beat\models.py:426
+#: django_celery_beat/models.py:437
 msgid ""
 "Clocked Schedule to run the task on.  Set only one schedule type, leave the "
 "others null."
 msgstr "执行任务的定时时间表。 仅设置一种时间表类型,将其他保留为空。"
 
-#: .\django_celery_beat\models.py:432
+#: django_celery_beat/models.py:443
 msgid "Positional Arguments"
 msgstr "位置参数"
 
-#: .\django_celery_beat\models.py:434
+#: django_celery_beat/models.py:445
 msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])"
 msgstr "JSON编码的位置参数(例如: [\"arg1\", \"arg2\"])"
 
-#: .\django_celery_beat\models.py:439
+#: django_celery_beat/models.py:450
 msgid "Keyword Arguments"
 msgstr "关键字参数"
 
-#: .\django_celery_beat\models.py:441
+#: django_celery_beat/models.py:452
 msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})"
 msgstr "JSON编码的关键字参数(例如: {\"argument\": \"value\"})"
 
-#: .\django_celery_beat\models.py:447
+#: django_celery_beat/models.py:458
 msgid "Queue Override"
 msgstr "队列覆盖"
 
-#: .\django_celery_beat\models.py:449
+#: django_celery_beat/models.py:460
 msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing."
 msgstr "在 CELERY_TASK_QUEUES 定义的队列。保留空以进行默认排队。"
 
-#: .\django_celery_beat\models.py:458
+#: django_celery_beat/models.py:469
 msgid "Exchange"
 msgstr "交换机"
 
-#: .\django_celery_beat\models.py:459
+#: django_celery_beat/models.py:470
 msgid "Override Exchange for low-level AMQP routing"
 msgstr "覆盖交换机以进行低层级AMQP路由"
 
-#: .\django_celery_beat\models.py:463
+#: django_celery_beat/models.py:474
 msgid "Routing Key"
 msgstr "路由键"
 
-#: .\django_celery_beat\models.py:464
+#: django_celery_beat/models.py:475
 msgid "Override Routing Key for low-level AMQP routing"
 msgstr "覆盖路由键以进行低层级AMQP路由"
 
-#: .\django_celery_beat\models.py:468
+#: django_celery_beat/models.py:479
 msgid "AMQP Message Headers"
 msgstr "AMQP消息头"
 
-#: .\django_celery_beat\models.py:469
+#: django_celery_beat/models.py:480
 msgid "JSON encoded message headers for the AMQP message."
 msgstr "AMQP消息的JSON编码消息头。"
 
-#: .\django_celery_beat\models.py:475
+#: django_celery_beat/models.py:486
 msgid "Priority"
 msgstr "优先级"
 
-#: .\django_celery_beat\models.py:477
+#: django_celery_beat/models.py:488
 msgid ""
 "Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority "
 "reversed, 0 is highest)."
 msgstr ""
 "优先级数字,介于0和255之间。支持者:RabbitMQ,Redis(优先级颠倒,0是最高)。"
 
-#: .\django_celery_beat\models.py:482
+#: django_celery_beat/models.py:493
 msgid "Expires Datetime"
 msgstr "过期时刻"
 
-#: .\django_celery_beat\models.py:484
+#: django_celery_beat/models.py:495
 msgid ""
 "Datetime after which the schedule will no longer trigger the task to run"
 msgstr "过期时刻,计划表将在此时刻后不再触发任务执行"
 
-#: .\django_celery_beat\models.py:489
+#: django_celery_beat/models.py:500
 msgid "Expires timedelta with seconds"
 msgstr "过期时间间隔,以秒为单位"
 
-#: .\django_celery_beat\models.py:491
+#: django_celery_beat/models.py:502
 msgid ""
 "Timedelta with seconds which the schedule will no longer trigger the task to "
 "run"
 msgstr "再过该秒后,不再触发任务执行"
 
-#: .\django_celery_beat\models.py:497
+#: django_celery_beat/models.py:508
 msgid "One-off Task"
 msgstr "一次任务"
 
-#: .\django_celery_beat\models.py:499
+#: django_celery_beat/models.py:510
 msgid "If True, the schedule will only run the task a single time"
 msgstr "如果为True,则计划将仅运行任务一次"
 
-#: .\django_celery_beat\models.py:503
+#: django_celery_beat/models.py:514
 msgid "Start Datetime"
 msgstr "开始时间"
 
-#: .\django_celery_beat\models.py:505
+#: django_celery_beat/models.py:516
 msgid "Datetime when the schedule should begin triggering the task to run"
 msgstr "时间表开始触发任务执行的时刻"
 
-#: .\django_celery_beat\models.py:510
+#: django_celery_beat/models.py:521
 msgid "Enabled"
 msgstr "已启用"
 
-#: .\django_celery_beat\models.py:511
+#: django_celery_beat/models.py:522
 msgid "Set to False to disable the schedule"
 msgstr "设置为False可禁用时间表"
 
-#: .\django_celery_beat\models.py:516
+#: django_celery_beat/models.py:527
 msgid "Last Run Datetime"
 msgstr "上次运行时刻"
 
-#: .\django_celery_beat\models.py:518
+#: django_celery_beat/models.py:529
 msgid ""
 "Datetime that the schedule last triggered the task to run. Reset to None if "
 "enabled is set to False."
 msgstr "最后一次触发任务执行的时刻。 如果enabled设置为False,则重置为None。"
 
-#: .\django_celery_beat\models.py:523
+#: django_celery_beat/models.py:534
 msgid "Total Run Count"
 msgstr "总运行次数"
 
-#: .\django_celery_beat\models.py:525
+#: django_celery_beat/models.py:536
 msgid "Running count of how many times the schedule has triggered the task"
 msgstr "任务执行多少次的运行计数"
 
-#: .\django_celery_beat\models.py:530
+#: django_celery_beat/models.py:541
 msgid "Last Modified"
 msgstr "最后修改"
 
-#: .\django_celery_beat\models.py:531
+#: django_celery_beat/models.py:542
 msgid "Datetime that this PeriodicTask was last modified"
 msgstr "该周期性任务的最后修改时刻"
 
-#: .\django_celery_beat\models.py:535
+#: django_celery_beat/models.py:546
 msgid "Description"
 msgstr "描述"
 
-#: .\django_celery_beat\models.py:537
+#: django_celery_beat/models.py:548
 msgid "Detailed description about the details of this Periodic Task"
 msgstr "有关此周期性任务的详细信息"
 
-#: .\django_celery_beat\models.py:546
+#: django_celery_beat/models.py:557
 msgid "periodic task"
 msgstr "周期性任务"
 
-#: .\django_celery_beat\models.py:547
+#: django_celery_beat/models.py:558
 msgid "periodic tasks"
 msgstr "周期性任务"
+
+#: django_celery_beat/templates/admin/djcelery/change_list.html:6
+msgid "Home"
+msgstr ""
diff --git a/django_celery_beat/migrations/0017_alter_crontabschedule_month_of_year.py b/django_celery_beat/migrations/0017_alter_crontabschedule_month_of_year.py
new file mode 100644
index 0000000..360c051
--- /dev/null
+++ b/django_celery_beat/migrations/0017_alter_crontabschedule_month_of_year.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.1.4 on 2022-12-17 09:21
+
+from django.db import migrations, models
+import django_celery_beat.validators
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('django_celery_beat', '0016_alter_crontabschedule_timezone'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='crontabschedule',
+            name='month_of_year',
+            field=models.CharField(default='*', help_text='Cron Months (1-12) Of The Year to Run. Use "*" for "all". (Example: "1,12")', max_length=64, validators=[django_celery_beat.validators.month_of_year_validator], verbose_name='Month(s) Of The Year'),
+        ),
+    ]
diff --git a/django_celery_beat/migrations/0018_improve_crontab_helptext.py b/django_celery_beat/migrations/0018_improve_crontab_helptext.py
new file mode 100644
index 0000000..79a8860
--- /dev/null
+++ b/django_celery_beat/migrations/0018_improve_crontab_helptext.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.16 on 2022-12-23 22:30
+
+from django.db import migrations, models
+import django_celery_beat.validators
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('django_celery_beat', '0017_alter_crontabschedule_month_of_year'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='crontabschedule',
+            name='day_of_week',
+            field=models.CharField(default='*', help_text='Cron Days Of The Week to Run. Use "*" for "all", Sunday is 0 or 7, Monday is 1. (Example: "0,5")', max_length=64, validators=[django_celery_beat.validators.day_of_week_validator], verbose_name='Day(s) Of The Week'),
+        ),
+    ]
diff --git a/django_celery_beat/models.py b/django_celery_beat/models.py
index 6bfc650..dbfeb7f 100644
--- a/django_celery_beat/models.py
+++ b/django_celery_beat/models.py
@@ -8,6 +8,7 @@ from datetime import timedelta
 
 import timezone_field
 from celery import current_app, schedules
+from cron_descriptor import get_description
 from django.conf import settings
 from django.core.exceptions import MultipleObjectsReturned, ValidationError
 from django.core.validators import MaxValueValidator, MinValueValidator
@@ -276,8 +277,8 @@ class CrontabSchedule(models.Model):
         max_length=64, default='*',
         verbose_name=_('Day(s) Of The Week'),
         help_text=_(
-            'Cron Days Of The Week to Run. Use "*" for "all". '
-            '(Example: "0,5")'),
+            'Cron Days Of The Week to Run. Use "*" for "all", Sunday '
+            'is 0 or 7, Monday is 1. (Example: "0,5")'),
         validators=[validators.day_of_week_validator],
     )
     day_of_month = models.CharField(
@@ -292,8 +293,8 @@ class CrontabSchedule(models.Model):
         max_length=64, default='*',
         verbose_name=_('Month(s) Of The Year'),
         help_text=_(
-            'Cron Months Of The Year to Run. Use "*" for "all". '
-            '(Example: "0,6")'),
+            'Cron Months (1-12) Of The Year to Run. Use "*" for "all". '
+            '(Example: "1,12")'),
         validators=[validators.month_of_year_validator],
     )
 
@@ -313,6 +314,15 @@ class CrontabSchedule(models.Model):
         ordering = ['month_of_year', 'day_of_month',
                     'day_of_week', 'hour', 'minute', 'timezone']
 
+    @property
+    def human_readable(self):
+        human_readable = get_description('{} {} {} {} {}'.format(
+            cronexp(self.minute), cronexp(self.hour),
+            cronexp(self.day_of_month), cronexp(self.month_of_year),
+            cronexp(self.day_of_week)
+        ))
+        return f'{human_readable} {str(self.timezone)}'
+
     def __str__(self):
         return '{} {} {} {} {} (m/h/dM/MY/d) {}'.format(
             cronexp(self.minute), cronexp(self.hour),
@@ -612,12 +622,16 @@ class PeriodicTask(models.Model):
         return fmt.format(self)
 
     @property
-    def schedule(self):
+    def scheduler(self):
         if self.interval:
-            return self.interval.schedule
+            return self.interval
         if self.crontab:
-            return self.crontab.schedule
+            return self.crontab
         if self.solar:
-            return self.solar.schedule
+            return self.solar
         if self.clocked:
-            return self.clocked.schedule
+            return self.clocked
+
+    @property
+    def schedule(self):
+        return self.scheduler.schedule
diff --git a/django_celery_beat/querysets.py b/django_celery_beat/querysets.py
index 622c4c2..f00eee3 100644
--- a/django_celery_beat/querysets.py
+++ b/django_celery_beat/querysets.py
@@ -6,4 +6,6 @@ class PeriodicTaskQuerySet(models.QuerySet):
     """QuerySet for PeriodicTask."""
 
     def enabled(self):
-        return self.filter(enabled=True)
+        return self.filter(enabled=True).prefetch_related(
+            "interval", "crontab", "solar", "clocked"
+        )
diff --git a/django_celery_beat/schedulers.py b/django_celery_beat/schedulers.py
index 449312b..2c1b577 100644
--- a/django_celery_beat/schedulers.py
+++ b/django_celery_beat/schedulers.py
@@ -85,6 +85,13 @@ class ModelEntry(ScheduleEntry):
 
         if not model.last_run_at:
             model.last_run_at = self._default_now()
+            # if last_run_at is not set and
+            # model.start_time last_run_at should be in way past.
+            # This will trigger the job to run at start_time
+            # and avoid the heap block.
+            if self.model.start_time:
+                model.last_run_at = model.last_run_at \
+                    - datetime.timedelta(days=365 * 30)
 
         self.last_run_at = model.last_run_at
 
diff --git a/django_celery_beat/templates/admin/djcelery/change_list.html b/django_celery_beat/templates/admin/djcelery/change_list.html
index 20b269f..0ebd3ef 100644
--- a/django_celery_beat/templates/admin/djcelery/change_list.html
+++ b/django_celery_beat/templates/admin/djcelery/change_list.html
@@ -11,7 +11,7 @@
     <ul class="messagelist">
       <li class="warning">
       Periodic tasks won't be dispatched unless you set the
-      <code>CELERYBEAT_SCHEDULER</code> setting to
+      <code>CELERY_BEAT_SCHEDULER</code> setting to
       <code>djcelery.schedulers.DatabaseScheduler</code>,
       or specify it using the <code>-S</code> option to celerybeat
       </li>
diff --git a/django_celery_beat/templates/admin/djcelery/change_periodictask_form.html b/django_celery_beat/templates/admin/djcelery/change_periodictask_form.html
new file mode 100644
index 0000000..76d2343
--- /dev/null
+++ b/django_celery_beat/templates/admin/djcelery/change_periodictask_form.html
@@ -0,0 +1,22 @@
+{% extends 'admin/change_form.html' %}
+
+{% block admin_change_form_document_ready %}
+    {{ block.super }}
+
+    {{ readable_crontabs|json_script:"readable-crontabs" }}
+    <script id="periodic-task-overrides">
+        const readableCrontabs = JSON.parse(django.jQuery("#readable-crontabs").text());
+        var originalCrontabHelp = "{{ adminform.form.fields.crontab.help_text }}";
+
+        var updateCrontabHelp = function(additional) {
+            django.jQuery(".field-crontab .help").html(
+                `${originalCrontabHelp}<br/>Translation: ${additional}`);
+        };
+
+        django.jQuery(".field-crontab_translation").hide()
+        django.jQuery(".field-crontab").change(function() {
+            updateCrontabHelp(readableCrontabs[django.jQuery("#id_crontab").val()]);
+        });
+
+    </script>
+{% endblock %}
diff --git a/docs/includes/introduction.txt b/docs/includes/introduction.txt
index 8b6f2e8..89a4fc9 100644
--- a/docs/includes/introduction.txt
+++ b/docs/includes/introduction.txt
@@ -1,4 +1,4 @@
-:Version: 2.4.0
+:Version: 2.5.0
 :Web: http://django-celery-beat.readthedocs.io/
 :Download: http://pypi.python.org/pypi/django-celery-beat
 :Source: http://github.com/celery/django-celery-beat
@@ -213,7 +213,7 @@ Both the worker and beat services need to be running at the same time.
 
   .. code-block:: sh
 
-     CELERYBEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
+     CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
 
 
 
diff --git a/docs/reference/django-celery-beat.signals.rst b/docs/reference/django-celery-beat.signals.rst
new file mode 100644
index 0000000..8deb970
--- /dev/null
+++ b/docs/reference/django-celery-beat.signals.rst
@@ -0,0 +1,11 @@
+=====================================================
+ ``django_celery_beat.signals``
+=====================================================
+
+.. contents::
+    :local:
+.. currentmodule:: django_celery_beat.signals
+
+.. automodule:: django_celery_beat.signals
+    :members:
+    :undoc-members:
diff --git a/docs/reference/index.rst b/docs/reference/index.rst
index e23ba2f..52139a8 100644
--- a/docs/reference/index.rst
+++ b/docs/reference/index.rst
@@ -19,3 +19,4 @@
     django-celery-beat.utils
     django-celery-beat.validators
     django-celery-beat.clockedschedule
+    django-celery-beat.signals
diff --git a/requirements/default.txt b/requirements/default.txt
index 3374e92..03c129a 100644
--- a/requirements/default.txt
+++ b/requirements/default.txt
@@ -4,3 +4,4 @@ django-timezone-field>=5.0
 backports.zoneinfo; python_version<"3.9"
 tzdata
 python-crontab>=2.3.4
+cron-descriptor>=1.2.32
diff --git a/requirements/docs.txt b/requirements/docs.txt
index e37f0f9..a5a237d 100644
--- a/requirements/docs.txt
+++ b/requirements/docs.txt
@@ -1,5 +1,5 @@
-Django>=2.2,<4.2
+Django>=2.2,<5.0
 https://github.com/celery/sphinx_celery/archive/master.zip
-https://github.com/celery/kombu/zipball/master#egg=kombu
-https://github.com/celery/celery/zipball/master#egg=celery
+https://github.com/celery/kombu/zipball/main#egg=kombu
+https://github.com/celery/celery/zipball/main#egg=celery
 -r default.txt
diff --git a/requirements/runtime.txt b/requirements/runtime.txt
index 7613f70..1ec387a 100644
--- a/requirements/runtime.txt
+++ b/requirements/runtime.txt
@@ -1 +1 @@
-Django>=2.2,<4.2
+Django>=2.2,<5.0
diff --git a/requirements/test-django.txt b/requirements/test-django.txt
index f7979f8..4638dae 100644
--- a/requirements/test-django.txt
+++ b/requirements/test-django.txt
@@ -1 +1 @@
-Django>=3.2,<4.2
+Django>=3.2,<5.0
diff --git a/requirements/test-django41.txt b/requirements/test-django41.txt
index ec38ac6..39d54ab 100644
--- a/requirements/test-django41.txt
+++ b/requirements/test-django41.txt
@@ -1 +1 @@
-django>=4.1.2,<4.2
+django>=4.1.4,<4.2
diff --git a/requirements/test-django42.txt b/requirements/test-django42.txt
new file mode 100644
index 0000000..fc8fea2
--- /dev/null
+++ b/requirements/test-django42.txt
@@ -0,0 +1 @@
+django>=4.2b1,<5.0
diff --git a/requirements/test.txt b/requirements/test.txt
index 98e1967..4c0c39c 100644
--- a/requirements/test.txt
+++ b/requirements/test.txt
@@ -1,5 +1,5 @@
 case>=1.3.1
-pytest-django>=2.2,<5.0
+pytest-django>=4.5.2,<5.0
 pytest>=6.2.5,<8.0
 pytest-timeout
 ephem
diff --git a/setup.py b/setup.py
index b68819b..2eefa42 100644
--- a/setup.py
+++ b/setup.py
@@ -39,12 +39,14 @@ classes = """
     Programming Language :: Python :: 3.8
     Programming Language :: Python :: 3.9
     Programming Language :: Python :: 3.10
+    Programming Language :: Python :: 3.11
     Programming Language :: Python :: Implementation :: CPython
     Programming Language :: Python :: Implementation :: PyPy
     Framework :: Django
     Framework :: Django :: 3.2
     Framework :: Django :: 4.0
     Framework :: Django :: 4.1
+    Framework :: Django :: 4.2
     Operating System :: OS Independent
     Topic :: Communications
     Topic :: System :: Distributed Computing
diff --git a/t/unit/test_schedulers.py b/t/unit/test_schedulers.py
index 062184c..161d1e2 100644
--- a/t/unit/test_schedulers.py
+++ b/t/unit/test_schedulers.py
@@ -599,6 +599,29 @@ class test_DatabaseScheduler(SchedulerCase):
                     s.sync()
         assert len(tried) == 1 and tried == {e1.name}
 
+    def test_starttime_trigger(self, monkeypatch):
+        # Ensure there is no heap block in case of new task with start_time
+        PeriodicTask.objects.all().delete()
+        s = self.Scheduler(app=self.app)
+        assert not s._heap
+        m1 = self.create_model_interval(schedule(timedelta(seconds=3)))
+        m1.save()
+        s.tick()
+        assert len(s._heap) == 2
+        m2 = self.create_model_interval(
+            schedule(timedelta(days=1)),
+            start_time=make_aware(
+                datetime.now() + timedelta(seconds=2)))
+        m2.save()
+        s.tick()
+        assert s._heap[0][2].name == m2.name
+        assert len(s._heap) == 3
+        assert s._heap[0]
+        time.sleep(2)
+        s.tick()
+        assert s._heap[0]
+        assert s._heap[0][2].name == m1.name
+
 
 @pytest.mark.django_db()
 class test_models(SchedulerCase):
diff --git a/tox.ini b/tox.ini
index e638a27..4423480 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,6 +4,7 @@ python =
     3.8: py38, apicheck, linkcheck
     3.9: py39, flake8, pydocstyle, cov
     3.10: py310
+    3.11: py311
     pypy-3.9: pypy3
 
 [gh-actions:env]
@@ -11,14 +12,16 @@ DJANGO =
     3.2: django32
     4.0: django40
     4.1: django41
+    4.2: django42
 
 [tox]
 envlist =
     py37-django{32}
-    py38-django{32,40,41}
-    py39-django{32,40,41}
-    py310-django{32,40,41}
-    pypy3-django{32}
+    py38-django{32,40,41,42}
+    py39-django{32,40,41,42}
+    py310-django{32,40,41,42}
+    py311-django{41,42}
+    pypy3-django{32,40,41,42}
     flake8
     apicheck
     linkcheck
@@ -36,6 +39,7 @@ deps=
     django32: -r{toxinidir}/requirements/test-django32.txt
     django40: -r{toxinidir}/requirements/test-django40.txt
     django41: -r{toxinidir}/requirements/test-django41.txt
+    django42: -r{toxinidir}/requirements/test-django42.txt
 
     linkcheck,apicheck: -r{toxinidir}/requirements/docs.txt
     flake8,pydocstyle: -r{toxinidir}/requirements/pkgutils.txt

More details

Full run details

Historical runs