Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用不存在的字段保存模型实例_Python_Django - Fatal编程技术网

Python 使用不存在的字段保存模型实例

Python 使用不存在的字段保存模型实例,python,django,Python,Django,我不知道这是一个bug还是Django允许它发生。我有一个Django模型: class Author(models.Model): name = models.CharField(max_length=128) 我创建了它的一个实例,并将一个值分配给一个不存在的字段address: author = Author() author.name = 'abce' author.address = 'defg' author.save() 实例已成功保存,并且没有错误消息。这是正常的吗?

我不知道这是一个bug还是Django允许它发生。我有一个Django模型:

class Author(models.Model):
    name = models.CharField(max_length=128)
我创建了它的一个实例,并将一个值分配给一个不存在的字段
address

author = Author()
author.name = 'abce'
author.address = 'defg'
author.save()

实例已成功保存,并且没有错误消息。这是正常的吗?

是的,这是正常的,地址永远不会被保存,如果你再次引用这个对象,它就不会在那里了。正是Python qwerk允许您随时向对象实例添加字段

class A:
    pass
a = A()
a.foo = 1

你是否应该是另一回事…

是的,这很正常,地址永远不会被保存,如果你再次引用这个对象,它就不存在了。正是Python qwerk允许您随时向对象实例添加字段

class A:
    pass
a = A()
a.foo = 1

是否应该是另一回事…

在Python中,用户定义的类型通常是可变的,这意味着它们可以更改,向用户定义的
对象添加
属性就像向普通的
字典添加
键一样。在Python中,用户定义的类型通常是可变的,这意味着它们可以更改,向用户定义的
对象添加
属性
就像向普通的
字典添加
键一样。您可以查看此答案以了解更多详细信息。Django将只对您定义的字段进行更新

来自django代码

你可以看到周围的田地

Author()._meta.concrete_fields
但你不能这样做

Author(name="name", address="sss")

它将引发无效参数。

正常。Django将只对您定义的字段进行更新

来自django代码

你可以看到周围的田地

Author()._meta.concrete_fields
但你不能这样做

Author(name="name", address="sss")
这将引起无效的争论