1
我有类似:django related_name查询和自己不一样的对象?
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
是None
),所以我选择了self.a = 0
,这会给我所需的行为。
但是,self
和self.thing.subthings.all()
中的对象不保持相同的值,但根据输出结果都有pk=187
。
他们都是同一个对象而不是? related_name
有没有缓冲我的逻辑?
我将如何获得在查询集中反映的更改self.a = 0
?
他们绝对*不是*同一个对象。而他们不具有相同价值的原因是,在将新值保存到数据库之前,您正在执行'subthings'查询。我不明白你在做什么,以便提供解决方案,或许你可以澄清。 –
当我保存SubThing时,在某些情况下,我需要遍历它的兄弟姐妹(链接到它的Thing)并更改它们中的值并重新保存它们。整个处理过程被封装在一个交易中,以确保数据在整体上保持一致。 –
但是你在做什么时遇到了什么问题?如果您试图排除'self'行进一步处理,只需跳过具有相同PK的'subthings'查询中的对象。这是你的问题,该怎么做?是否有一个原因,你为什么要'setattr(self,'a',0)'而不是'self.a = 0'? –