#django #python-3.x #django-rest-framework
#django #python-3.x #django-rest-фреймворк
Вопрос:
Я работаю над некоторым кодом Django / Python.
По сути, серверной части моего кода отправляется список параметров с именем ‘p’. Все эти значения берутся из моделей Django.
Когда я попытался переопределить их как таковые:
p['age']=25
Я получил «ошибку модели». Тем не менее, если я напишу:
p.age=25
это работает нормально.
Я подозреваю, что внутренне choice # 1 пытается установить новое значение экземпляру класса, созданного Django, который возражает против переопределения, но внутренне Python3 просто заменяет экземпляр Django «новым» атрибутом с тем же именем (‘age’), без учета предыдущего происхождения, типа или класса того, что создал Django.
Все это находится в RESTful framework и фактически в тестовом коде. Так что, даже если я прав, я не верю, что это что-то меняет для меня в реальности.
Но кто-нибудь может объяснить, почему один тип присвоения существующему dict работает, а другой терпит неудачу?
Комментарии:
1. Каков результат
print(type(p))
?2. Что такое «ошибка модели»? Пожалуйста, вставьте полное сообщение об ошибке.
3. Вам нужно будет предоставить полный код. Что именно такое p и откуда оно берется? Если
p.age
работает, ноp['age']
нет, то p определенно не является dict .4. Я неправильно выразился, и это, без сомнения, проблема. Благодаря «магии» Django, p — это класс, а не dict (хотя он может быть построен из класса dict), а элементы сами по себе являются классами, не
Ответ №1:
p — это класс, а не dict. Джанго построил это таким образом.
Но, как таковой, один подход (p.age) позволяет изменять атрибут объекта в классе.