我有一个django模型如下:
class M1(models.Model):
m1code = models.CharField(max_length=25)
m1title = models.CharField(max_length=500)
m1description = models.CharField(max_length=1000, null=True, blank=True)
def __unicode__(self):
return self.m1title
class M2(MPTTModel):
m1 = models.ForeignKey(M1)
name = models.CharField(max_length=500, unique=False)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
def __unicode__(self):
return self.name
def save(self, *args, **kwargs):
degreeroot = M2.objects.get(name=self.m1.m1title)
requirement = M2.objects.create(name=self.name, parent=degreeroot, m1=self.m1)
这里我有两个型号,一个型号M2(MPTT型号)有M1的外键。每当我从管理员进入M2时,我希望django根据m1的选择自动将值输入M2中的父级。
这里我定义了一个save()来执行此操作。但是当我在我的管理员中运行它时,该程序将进入运行时错误。
RuntimeError at /admin/acadprog/m2/add/
maximum recursion depth exceeded while calling a Python object
我哪里错了?
答案 0 :(得分:1)
您不想创建新条目,因为这将始终导致无限递归。您只想设置self.parent
,然后调用超类保存方法:
def save(self, *args, **kwargs):
if not self.parent:
self.parent = M2.objects.get(name=self.m1.m1title)
return super(M2, self).save(*args, **kwargs)