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'? –