【问题标题】:Python/Django model dictionary allows one type of update, but not anotherPython/Django 模型字典允许一种类型的更新,但不允许另一种
【发布时间】:2019-03-28 03:21:53
【问题描述】:

我正在编写一些 Django/Python 代码。

基本上,我的代码后端会收到一个名为“p”的参数字典。这些值都来自 Django 模型。

当我试图这样覆盖它们时:

p['age']=25

我收到“模型错误”。然而,如果我写:

p.age=25

它工作正常。

我的怀疑是,在内部,选择 #1 尝试为 Django 创建的类的实例设置一个新值,该类的对象要被覆盖,但在内部 Python3 只是简单地将 Django 实例替换为相同的名称('age'),不考虑 Django 创建的先前来源、类型或类。

所有这些都在 RESTful 框架中,并且实际上在测试代码中。因此,即使我是对的,我也不相信它在现实中对我有任何改变。

但是谁能解释为什么对现有 dict 的一种分配有效,而另一种则失败?

【问题讨论】:

  • print(type(p)) 的结果是什么?
  • 什么是“模型错误”?请粘贴完整的错误消息。
  • 您需要提供完整的代码。什么确切地是p,它来自哪里?如果p.age 有效但p['age'] 无效,那么 p 绝对不是字典。
  • 我说错了,这无疑是问题所在。由于 Django 的“魔法”,p 是一个类,而不是一个 dict(尽管它可能是 dict 类的构建)并且元素本身就是类,而不是

标签: django python-3.x django-rest-framework


【解决方案1】:

p 是一个类,而不是一个字典。 Django 就是这样构建的。

但是,同样地,一种方法 (p.age) 允许您更改类中对象的属性。

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2013-07-07
    相关资源
    最近更新 更多