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

问题描述:

我不知道这是一个错误还是Django只允许它发生。我有一个Django模型:使用不存在的字段保存模型实例

class Author(models.Model): 
    name = models.CharField(max_length=128) 

我创建它的一个实例,并赋值给一个不存在的领域address

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

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

是它的正常,地址永远不会被保存,如果你再次引用这个对象,它不会在那里。它是你被允许添加字段,只要你想

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

无论你应该是一个不同的问题一个对象实例只是Python的qwerk ...

在Python中,用户自定义类型通常是mutable,这意味着它们可以被更改,并且将attribute添加到用户定义的object就如同将key添加到普通dictionary一样。你可以检查这个答案的更多细节are user defined classes mutable

是啊正常。 Django会只为你的

Author()._meta.concrete_fields 

定义

从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(name="name", address="sss") 

它会引发无效的争论。