в админке кнопку, по нажатию которой любая существующая запись модели копировалась и в то же время открывалось окно редактирования этой новой записи
Как сделал: создал темплейт с кнопкой для копирования, а в 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
в какой-то момент нужно декодить и делать json.dumps
Например, в момент перехода по пути add/? Типа переопределить метод/функцию, которая вызывается джангой в этот момент?
Обсуждают сегодня