Когда я нажимаю определенные ссылки на странице администратора моего приложения, я получаю ошибки, которые выглядят следующим образом:
"Объект с идентификатором" 12345-2Q2019-SCA â A "не существует. Возможно, он был удален?"
Первичный ключ записи (который отображается по ссылке) на самом деле таков:
12345-2Q2019-SCA_ E2 A
Любая запись, которая содержит подчеркивание, за которым следует заглавная буква A-F, выдает эту ошибку. Кажется, что Django хочет закодировать подчеркивание и завершающие буквы в шестнадцатеричный символ, и, поскольку PK с шестнадцатеричным символом отсутствует в базе данных, Django не может найти запись и не будет перенаправлять на мой объект изменить форму.
Я пытался привести это PK к строке модели, переопределив метод get_admin_url ():
# models.py
def get_admin_url(self):
content_type = ContentType.objects.get_for_model(self.__class__)
return reverse("admin:%s_%s_change" % (content_type.app_label, content_type.model), args=(self.id,))
А в административном файле вручную создавая URL с помощью format_html:
# admin.py
def url_for_result(self, result):
pk = Object.objects.get(id=result.id)
html_string = format_html(u'<a href="/admin/project/object/{}/change/">{}', pk.id, pk.id)
return html_string
list_display = ('url_for_result',)
Тем не менее, я не могу получить ссылки с этими «шестнадцатеричными» символами для ссылки на их страницы формы изменений.
Мои файлы DB, server и settings.py строго определяют кодировку UTF8.
Кодирует / декодирует ли Django эти шестнадцатеричные символы где-нибудь или я могу игнорировать эти символы?