Почему у администратора Django возникают проблемы с подчеркиванием и шестнадцатеричными символами в первичных ключах? - PullRequest
0 голосов
/ 02 мая 2019

Когда я нажимаю определенные ссылки на странице администратора моего приложения, я получаю ошибки, которые выглядят следующим образом:

"Объект с идентификатором" 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 эти шестнадцатеричные символы где-нибудь или я могу игнорировать эти символы?

...