django_apscheduler.models.DoesNotExist: DjangoJob соответствующий запрос не существует
Привет я пытаюсь реализовать планировщик заданий, используя djangorestframework, django-apscheduler и библиотеки запросов, но когда я пытаюсь опубликовать запрос для планирования задания, появляется следующая ошибка, хотя задание запланировано, но ответ является кодом Внутренняя ошибка сервера (500) с последующей ошибкой
Трассировка (последний вызов был последним): файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/core/handlers/exception.py", строка 35, во внутренней
response = get_response(request)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/core/handlers/base.py", строка 128, в _get_response
response = self.process_exception_by_middleware(e, request)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/core/handlers/base.py", строка 126, в _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/views/decorators/csrf.py", строка 54, в wrapped_view
return view_func(*args, **kwargs)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/views/generic/base.py", строка 69, в поле зрения
return self.dispatch(request, *args, **kwargs)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/rest_framework/views.py", строка 483, в отправке
response = self.handle_exception(exc)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/rest_framework/views.py", строка 443, в handle_exception
self.raise_uncaught_exception(exc)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/rest_framework/views.py", строка 480, в ответе об отправке = обработчик (запрос, * аргументы, **kwargs)
Файл "/Users/gauravyadav/Python/env4/Scheduler3/distribute_jobs/views.py", строка 298, в сообщении
scheduler.start()
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/apscheduler/schedulers/blocking.py", строка 19, в начале
self._main_loop()
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/apscheduler/schedulers/blocking.py", строка 30, в _main_loop
wait_seconds = self._process_jobs()
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/apscheduler/schedulers/base.py", строка 987, в _process_jobs
jobstore_next_run_time = jobstore.get_next_run_time()
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django_apscheduler/jobstores.py", строка 29, во внутреннем
return func(*a, **k)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django_apscheduler/jobstores.py", строка 79, в get_next_run_time
return
// невозможно идентифицировать этот код deserialize_dt(DjangoJob.objects.filter(next_run_time__isnull=False).earlie s .t('next_run_time').next_run_time)///
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/db/models/query.py", строка 597, в самой ранней версии
return self._earliest_or_latest(*fields, field_name=field_name)
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/db/models/query.py", строка 594, в _earliest_or_latest
return obj.get()
Файл "/Users/gauravyadav/Python/env4/lib/python3.6/site-packages/django/db/models/query.py", строка 403, в get
self.model._meta.object_name
django_apscheduler.models.DoesNotExist: DjangoJob соответствующий запрос не существует. [04 / Jul / 2018 12:19:05] "POST / jobs / HTTP / 1.1" 500 120459
- -
заголовок
models.py
Класс Jobs (models.Model, ListCharField, ListTextField):
title = models.CharField(max_length=20, blank=False, default='')
tenantId = models.TextField(max_length=50, null=True, default='')
studentid = models.CharField(max_length=20, blank=False, default=None,
null=True, db_index=False)
contentId = models.IntegerField(blank=False, null=False, db_index=False)
version = models.IntegerField(null=True)
appVersion = models.CharField(max_length=50, null=True)
devicePlatformName = models.TextField(max_length=50, null=True)
deviceIdentity = models.TextField(max_length=200, null=True)
deviceToken = models.TextField(max_length=200, null=True)
fcmToken = models.TextField(max_length=200, null=True)
fbTokenId = models.TextField(max_length=200, null=True)
userRole = models.TextField(max_length=50, null=True)
users = ListCharField(base_field=models.CharField(max_length=50,
null=True), null=True, size=100, max_length=20000)
# # users = models.CharField(max_length=600, null=True, default='')
allUsers = models.BooleanField(default=False)
groupIdList = ListTextField(base_field=models.IntegerField(null=True),
null=True)
sendSMS = models.BooleanField(default=False)
sendEmail = models.BooleanField(default=False)
distributeDateTime = models.CharField(max_length=200, null=True)
contentType = models.CharField(max_length=200, null=True)
distributeOn = models.CharField(max_length=200, null=True)
orgId = models.CharField(max_length=200, null=False, default=None)
run_immediate = models.BooleanField(default=False)
class Meta:
ordering = ('title',)
####### serializers.py ########
Класс JobsSerializer (serializers.ModelSerializer):
users=serializers.ListField(child=serializers.CharField(max_length=200))
groupIdList = serializers.ListField(child=serializers.IntegerField())
class Meta:
model = Jobs
fields = (
'title',
'tenantId',
'studentid',
'contentId',
'version',
'appVersion',
'devicePlatformName',
'deviceIdentity',
'deviceToken',
'fcmToken',
'fbTokenId',
'userRole',
'groupIdList',
'allUsers',
'users',
'sendSMS',
'sendEmail',
'distributeDateTime',
'contentType',
'distributeOn',
'orgId',
'run_immediate',
# 'deviceInfoData'
)
def create(self, validated_data):
"""
Create and return a new `Jobs` instance, given the validated data.
"""
return Jobs.objects.create(**validated_data)
######### views.py from rest_framework import mixins
from rest_framework import generics
from Scheduler3 import settings
from .models import Jobs
from .serializers import JobsSerializers
import requests
import json
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from django_apscheduler.jobstores import DjangoJobStore
scheduler = BlockingScheduler()
url = 'mysql+mysqldb://' + settings.DATABASES['default']['USER'] + ':'
\
+ settings.DATABASES['default']['PASSWORD'] + '@' +
settings.DATABASES['default']['HOST'] + '/' + \
settings.DATABASES['default']['NAME']
# jobstores = dict(default=SQLAlchemyJobStore(url=url))
# scheduler.configure(jobstores=jobstores)
scheduler.add_jobstore(DjangoJobStore(), "default")
def date_time_converter(distributeOn):
splited_run_date = '{}.000000'.format(distributeOn)
return splited_run_date
def schedule_job(users, contentId, orgId, allUsers, contentType,
tenantId, studentid, version, appVersion,
deviceInfoData, devicePlatformName, deviceIdentity,
deviceToken, fcmToken, fbTokenId, userRole,
groupIdList, sendSMS, sendEmail):
payload = {
"tenantId": "{}".format(tenantId),
"studentid": "{}".format(studentid),
"version": '{}'.format(version),
"appVersion": "{}".format(appVersion),
"devicePlatformName": "{}".format(devicePlatformName),
"deviceIdentity": "{}".format(deviceIdentity),
"deviceToken": "{}".format(deviceToken),
"fcmToken": "{}".format(fcmToken),
"fbTokenId": "{}".format(fbTokenId),
"userRole": "{}".format(userRole),
"users": users,
"allUsers": '{}'.format(allUsers) if 1 else 0,
"groupIdList": groupIdList,
"sendSMS": '{}'.format(sendSMS) if 1 else 0,
"sendEmail": '{}'.format(sendEmail) if 1 else 0,
"orgId": "{}".format(orgId),
"deviceInfoData": deviceInfoData
}
print("Payload")
print(payload)
url = 'http//:designated/url/distribute
r = requests.put(url, data=json.dumps(payload), headers=headers)
print(r.status_code, users)
print(r.reason)
print(r.text)
class JobList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
"""
List all jobs, or create a new job.
"""
queryset = Jobs.objects.all()
serializer_class = JobsSerializers
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request):
# print('c')
# scheduler.start()
# print('d')
print(request.data)
"""Serialzer data """
"""Fetching Request Data """
distributeOn = request.data.get('distributeOn')
jobTitle = request.data.get('title')
users = request.data.get('users')
contentId = request.data.get('contentId')
orgId = request.data.get('orgId')
contentType = request.data.get('contentType')
tenantId = request.data.get('tenantId')
studentid = request.data.get('studentid')
version = request.data.get('version')
appVersion = request.data.get('appVersion')
deviceInfoData = request.data.get('deviceInfoData')
devicePlatformName = request.data.get('devicePlatformName')
deviceIdentity = request.data.get('deviceIdentity')
deviceToken = request.data.get('deviceToken')
fcmToken = request.data.get('fcmToken')
fbTokenId = request.data.get('fbTokenId')
userRole = request.data.get('userRole')
groupIdList = request.data.get('groupIdList')
sendSMS = request.data.get('sendSMS')
sendEmail = request.data.get('sendEmail')
allUsers = request.data.get('allUsers')
"" "Вызов функции форматирования времени по предоставленному времени для запуска задания" ""
splited_datetime = date_time_converter(distributeOn)
"" "Создание планировщика и планирование работ" ""
job1 = scheduler.add_job(schedule_job, 'date',
run_date='{}'.format(splited_datetime),
misfire_grace_time=200, args=[users,
contentId, orgId, allUsers, contentType,
tenantId,
studentid, version, appVersion,
deviceInfoData, devicePlatformName,
deviceIdentity,
deviceToken,
fcmToken, fbTokenId, userRole,
groupIdList,
sendSMS, sendEmail],
max_instances=20,
replace_existing=True)
if not scheduler.running == True:
print('c')
scheduler.start()
print('d')
print("after add job method called")
print(job1.id)
return self.create(request)
########## urls.py ######
from django.conf.urls import url, include
from django.contrib import admin
from django.urls import path
urlpatterns = [
url('admin/', admin.site.urls),
url(r'^', include('distribute_jobs.urls')),
]
### distribute_jobs / url.py from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from distribute_jobs import views
urlpatterns = [
url(r'^jobs/$', views.JobList.as_view()),
url(r'^jobs/(?P<pk>[0-9]+)/$', views.JobDetail.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
1 ответ
Привет, это проблема с ошибкой в django-apscheduler версии =0.2.11, которая устранена в версии =0.2.12 для получения более подробной информации, пожалуйста, нажмите здесь