以下是模型:
class ModelA(models.Model):
field1 = models.CharField(max_length=100)
field2 = models.CharField(max_length=100)
field3 = JSONField(default=[])
def save(self, *args, **kwargs):
# Below print should be None
# But it shows the value of the previously created object, why ?
print "------------------------------------------------"
print self.id
print "self.field3"
print self.field3
self.field2 = self.field1 + " world"
self.field3.append(self.field2)
super(ModelA, self).save(*args, **kwargs)
以下是观点:
def view1(request):
for x in range(1, 3):
a = ModelA.objects.create(field1="hello%s" % x)
预期产出:
# None
# self.field3
# []
# None
# self.field3
# []
达到产出:
# None
# self.field3
# []
# None
# self.field3
# [u'Hello1 world']
# None
# self.field3
# [u'Hello1 world', u'Hello2 world']
那么,根据给定的输出,你能告诉我为什么它在创建新对象时使用以前的对象值吗?
答案 0 :(得分:2)
这是来自Django documentation:
如果您为该字段指定默认值,请确保它是可调用的,例如dict (对于空的默认值)或返回dict的可调用对象(例如 功能)。错误地使用default = {}会创建一个可变的默认值 在JSONField的所有实例之间共享。
因此请改用:
field3 = JSONField(default=list)