我不知道这是一个bug还是Django只允许它发生。我有一个Django模型:
class Author(models.Model):
name = models.CharField(max_length=128)
我创建了一个实例,并为不存在的字段address
分配了一个值:
author = Author()
author.name = 'abce'
author.address = 'defg'
author.save()
实例已成功保存,并且没有错误消息。这是正常的吗?
答案 0 :(得分:1)
是正常的,地址永远不会被保存,如果你再次引用这个对象,它就不会存在。它只是Python qwerk,你可以随时在对象实例中添加字段
class A:
pass
a = A()
a.foo = 1
你是否应该是另一回事......
答案 1 :(得分:1)
在Python中,用户定义的类型通常为mutable
,这意味着可以更改它们,向用户定义的attribute
添加object
就像添加{{} 1}}到普通的key
。您可以查看此答案以获取更多详细信息are user defined classes mutable
答案 2 :(得分:1)
是的正常。 Django只会为您定义的字段进行更新
来自django代码
for field in self._meta.concrete_fields: if field.attname in non_loaded_fields: # This field wasn't refreshed - skip ahead. continue setattr(self, field.attname, getattr(db_instance, field.attname))
您可以按
查看字段Author()._meta.concrete_fields
但你不能这样做
Author(name="name", address="sss")
会引发无效论证。