使用不存在的字段保存模型实例
问题描述:
我不知道这是一个错误还是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")
它会引发无效的争论。