Python 使用不存在的字段保存模型实例
我不知道这是一个bug还是Django允许它发生。我有一个Django模型: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() 实例已成功保存,并且没有错误消息。这是正常的吗?
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")
这将引起无效的争论