从admin插入时出现Django运行时错误

时间:2014-10-17 20:51:46

标签: python django django-admin

我有一个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

我哪里错了?

1 个答案:

答案 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)