我有Symbol
型号:
class Symbol(models.Model):
market = models.CharField(
max_length=20,
null=True,
blank=True,
)
并生成一些Symbol
模型数据。
我感到惊讶的是:
>>> s = Symbol.objects.first()
>>> s.i_dont_know = 1
>>> s.save()
没有出现任何错误?
为什么不出现任何错误?
答案 0 :(得分:2)
当您在模型对象上调用save
方法时,它将仅更新我们在模型中定义的模型字段。将忽略模型对象的所有其他属性。这就是你没有得到任何错误的原因。
答案 1 :(得分:0)
为什么不出现任何错误?
在Model
上,您可以定义零个或多个在数据库中具有等效项的字段,但除此之外,您还可以在模型上添加零个或多个函数,属性,属性等。
你可能已经以某种方式做到了。例如:
class Symbol(models.Model):
market = models.CharField(
max_length=20,
null=True,
blank=True,
)
def __init__(self, *args, **kwargs):
super(Symbol, self).__init__(*args, **kwargs)
self.cache = {}
@property
def market3(self):
return self.market and self.market[:3]
毕竟这些模型实际上是Python对象,附加了一些魔法,如果你改变一个属性并且有一个同名的字段,那么它对应于那个字段。但通常模型还有一些额外的逻辑和属性,使它们更智能,在模型级别处理部分请求,计算依赖于一个或多个字段的属性等。
写作:
s.i_dont_know = 1
您将一个属性附加到名为s
且值为'i_dont_know'
的{{1}}对象。但请注意,此属性不持久性:如果您保存对象,稍后从数据库重新加载它,那么您附加到它的所有额外数据将会消失。除非你定义一个增加一些额外逻辑的setter。