Словарь моделей Python / Django допускает один тип обновления, но не другой

#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) позволяет изменять атрибут объекта в классе.