我有类似的东西:
class Thing(models.Model):
pass
class SubThing(models.Model):
thing = models.ForeignKey(Thing, related_name='subthings')
a = models.DecimalField()
# some more Decimal fields
def __str__():
return str(self.pk) + ' - ' + str(self.a)
def save():
self.a = 0
print(self) # outputs 187 - 0
print(self.thing.subthings.all()) # outputs ... 187 - 20 ...
# do some calculations on self and siblings
Super(SubThing, self).save()
我对上面代码的输出感到困惑。在某些情况下,我需要在保存时重新计算SubThing的兄弟姐妹。查询self.thing.subthings.all()
包含self
,因为我无法可靠地排除它(.exclude(self)
似乎不起作用,而新实例pk
是{{1} }}),我选择了None
,它会给我我需要的行为。
但是,self.a = 0
和self
中的对象不包含相同的值,而根据输出,两者都有self.thing.subthings.all()
。
它们是否是同一个对象而不是? pk=187
是否存在一些违反逻辑的缓存?
如何在查询集中反映出更改related_name
?
答案 0 :(得分:0)
在Python模型实例上设置属性不会导致数据库发生更改。这就是save()
方法的目的。因此,如果您希望查看对后续查询中反映的实例的已保存更改,则需要先保存模型。
def save():
self.a = 0
super(SubThing, self).save() # persists your changes to the database
self.thing.subthings.all() # will reflect the updated value
# do stuff