170 похожих чатов

Всем привет! Есть модель с полем JSONField, была задача сделать

в админке кнопку, по нажатию которой любая существующая запись модели копировалась и в то же время открывалось окно редактирования этой новой записи

Как сделал: создал темплейт с кнопкой для копирования, а в admin.py переопределил метод response_change, в котором проверяю, что если нажата кнопка создания копии, то беру значение всех полей модели и делаю из них словарь следующего вида:

url_params = {"название_поля": "значение_поля"}

Далее конвертирую этот словарь в url-параметры через urllib.parse.urlencode(мой_словарь) и редиректю пользователя по пути f"/admin/назавние_приложения/название_модели/add/?{url_params}"

Всё работало прекрасно: и charfield, и m2m, и fk дублировались в новой записи без проблем. Но есть проблемы с JSONField. Например, у меня там указано значение {"test": true}. Копирую запись и в закодированном виде в url-параметрах выглядит как %7B%27test%27%3A+True%7D, что при декодировании является {'test': True}, точно так же и отображается в админке, то есть этот json не валидный. Тогда я попробовал брать не просто значение JSONField и отдавать его в словаре, я ещё перед этим прогнать через json.dumps(значение_поля). В этом случае в url-параметрах передаётся %7B"test"%3A+true%7D, и при декодировании этого значение выглядит всё прекрасно: {"test": true}. Однако в админке это отображается неверно: "{\"test\": true}", появляются кавычки в начале и конце, а так же экранируются кавычки в ключе джсона

Как понимаю, раз в url-параметрах передаётся всё верно, декодируются правильно, то это уже сама джанга добавляет кавычки и экранирует имеющиеся. Можно ли как-то этого избежать, чтоб json вставлялся верно?

Функция создания словаря из полей модели тут: https://www.toptal.com/developers/hastebin/aqibuxifoz.properties

2 ответов

21 просмотр

в какой-то момент нужно декодить и делать json.dumps

Павел-Анохин Автор вопроса
Nikolay Cherniy
в какой-то момент нужно декодить и делать json.dum...

Например, в момент перехода по пути add/? Типа переопределить метод/функцию, которая вызывается джангой в этот момент?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта