Невозможно обновить поле DateTimeField со значением None в Django

Фон

Я использую django-post-office для создания и постановки в очередь объектов электронной почты и использую команду send_queued_mail django (поставляется с модулем) для обработки поставленных в очередь писем. Я заметил ошибку, когда:

  • MAX_RETRIES либо не установлен в настройках, либо установлен на 0
  • При обработке очередей писем, по крайней мере, одно письмо не было отправлено. В моем случае это произошло из-за неправильного адреса получателя.
  • Затем он использовал bulk_update для обновления неудачных писем, т.е. Email.objects.bulk_update(emails_failed, ['status', 'scheduled_time', 'number_of_retries']) - Значения, используемые для обновления emails_failed: 1,None,0
  • .
  • Фрагмент ошибки - django.db.utils.DataError: ('22018', '[22018] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Operand type clash: int is incompatible with datetime2 (206) (SQLExecDirectW); [22018] [Microsoft][ODBC Driver 17 for SQL Server][SQ L Server]Statement(s) could not be prepared. (8180)')

Я полагаю, что причиной ошибки является обновление столбца scheduled_time со значением None, поскольку он является DateTimeField, однако null=True установлен в модели Email. Пожалуйста, обратитесь к фрагменту ниже, чтобы увидеть схему модели Email (снова поставляется с модулем django-post-office)

Фрагмент модели электронной почты

  • scheduled_time = models.DateTimeField(_("Scheduled Time"),blank=True, null=True, db_index=True,help_text=_("The scheduled sending time"))

  • status = models.PositiveSmallIntegerField(_("Status"),choices=STATUS_CHOICES, db_index=True,blank=True, null=True)

  • number_of_retries = models.PositiveIntegerField(null=True, blank=True)

Версии

  1. Django==3.2.13
  2. Python==3.7
  3. django-post-office==3.6.0
  4. DB - SQL сервер

Вопросы

  1. Есть ли основания полагать, что исключение SQL возникает из-за значения None, используемого для обновления столбца schedule_time?
  2. Является ли это скорее проблемой БД SQL сервера, которая не позволяет Null в поле datetime?
Вернуться на верх