我試圖計算輪場在下面的模式,每次新的比賽被創建,但要做到這一點,我首先需要玩家參與人數:自動計算領域
class Tournament(models.Model):
rounds = models.PositiveIntegerField()
players = models.ManyToManyField(User)
def save(self, *args, **kwargs):
self.rounds = self.players.count() + 3
super(Tournament, self).save()
這些問題似乎是,如果超級是不是救了你不能訪問其M2M領域:
「比賽」實例需要一個之前必須有一個 主鍵值可以使用210多對多關係。
有什麼建議嗎?
_
我已經測試
def save(self, *args, **kwargs):
super(Tournament, self).save()
self.rounds = self.players.count() + 3
super(Tournament, self).save()
但players.count()總是返回0
* post_save *信號是另一個我嘗試,但我得到了一個美麗無限遞歸
def trigger_create_round(sender, **kwargs):
tournament = kwargs['instance']
tournament.rounds = tournament.players.count() + 3
tournament.save()
post_save.connect(trigger_create_round, sender=Tournament, weak=False)
Tha NKS)
編輯:
即使使用m2m_changed信號問題仍然存在:
def trigger_create_round(sender, instance, action, reverse, model, pk_set, **kwargs):
if action == 'post_add':
for val in pk_set:
print val
m2m_changed.connect(trigger_create_round, sender=Tournament.players.through, weak=False)
但沒有印刷價值雖然添加了新的球員。
注:我正在通過管理網站進行所有錦標賽管理。
'如果tournament.rounds!= tournament.players.count()+ 3:tournament.save()'只是一個想法來打破循環。可能是更好的方法。 – DTing 2011-05-10 18:22:23
保存模型後保存多對多關係。這就是爲什麼你無法從模型的「保存」方法訪問計數。這樣做是因爲你無法保存多對多的關係而沒有模型的主鍵,如果碰巧是一個新的對象,它還沒有主鍵。 – 2011-05-10 20:57:04