1
後,我有以下問題:Django的分配M2M我工作在Django項目保存
我有這兩個類,團隊和項目。當我創建一個項目時,我想自動爲團隊中的用戶分配在創建項目時選擇的項目到新項目。 我重寫了項目的保存方法,並在創建項目後將用戶分配給該項目(我在保存之後做了,因爲在給出錯誤之前)。我嘗試了幾種方法,但都沒有成功。 試圖:
self.user.add(*self.team.users.all())
self.save()
而這是行不通的。
嘗試迭代:
for uTeam in self.team.users.all():
self.users.add(uTeam)
和也不管用。
,對我的工作的唯一方法是這樣的,但只有在Django的外殼:
P = Project.objects.get(pk=1)
T = Team.objects.get(pk=1)
P.user.add(*T.user.all())
P.save()
這是下面我有,但Django不工作的解決方案(提供了一個無限循環)
class Team(models.Model):
name = models.CharField(max_length=200,
help_text=_('name of the team'))
user = models.ManyToManyField(settings.AUTH_USER_MODEL,
related_name="members_of_team",
help_text=_('users of the team'),
null=True
)
and more....
class Project(models.Model):
id = models.AutoField(primary_key=True, null=False)
name = models.CharField(max_length=200,
help_text=_('name of project'),
)
team = models.ForeignKey(Team,`enter code here`
on_delete=models.PROTECT,
help_text=_('team of project'))
created_by = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.PROTECT,
related_name='creator_project',
blank=True,
null=False,
help_text=_('project created by'))
customer = models.ForeignKey(Customer,
on_delete=models.PROTECT,
help_text=_('customer'))
user = models.ManyToManyField(settings.AUTH_USER_MODEL,
related_name='users_team',
blank=True,
null=False,
help_text=_('users of this project'))
def save(self, *args, **kwargs):
if self.checkIntegrity():
super(Project, self).save(*args, **kwargs)
if self.user.all().count() < self.team.user.all().count():
T = Team.objects.get(pk=self.team.id)
P = Project.objects.get(pk=self.id)
P.user.add(*T.user.all())
P.save()
謝謝您的幫助
只是爲了說明 - 在保存項目本身引發異常之前將用戶添加到項目中,因爲項目還沒有主鍵,因此您不能將用戶分配到(在那個時刻)不存在的項目。接下來 - afaik在迭代中添加用戶(第二次嘗試)並將它們添加爲列表(您在'save()'中的當前代碼)不應該有任何區別。你有沒有一些調試信息,如果它真的循環通過那個循環? – yedpodtrzitko 2013-03-27 14:22:03
發生了什麼是P.save()調用保存項目和檢查完整性,超級調用(項目,自我),再次分配T和P,並添加用戶另一個時間... 我注意到,分配,但進入無限循環,一段時間後得到一個「RuntimeError:最大遞歸深度超過」 – Charlisim 2013-03-27 15:34:01
是的,這是有道理的。但是調用'P.save()'(最後一行不是必須的,對吧? – yedpodtrzitko 2013-03-27 22:47:54