Я получил эту проблему после копирования файла таблицы mytable.idb из другого места. Чтобы устранить эту проблему, я сделал следующее:
ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;
Скопировать файл mytable.idb
ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;
Перезапустить MySql
Я все равно оставил форму в InvoiceUpdateView
; вместо перенаправления по запросу GET
я теперь показываю только предупреждающее сообщение вместе с формой. Я предотвращаю обновление экземпляра Invoice
в запросах POST
.
class InvoiceUpdateView(PermissionRequiredMixin, UpdateView):
permission_required = ...
template_name = ...
model = Invoice
fields = ...
@cached_property
def can_be_modified(self):
# fetch from DB
start_date = ...
end_date = ...
if start_date <= self.object.date <= end_date:
return True
return False
def form_valid(self, form):
if not self.can_be_modified:
messages.error(self.request, 'date is not in range')
return redirect('invoice-detail')
return super().form_valid(form)
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if not self.can_be_modified:
messages.error(self.request, 'date is not in range')
return ctx
Это не самое изящное решение, но оно достаточно для моего случая.