Django:这些模型的正确顺序

时间:2011-11-05 19:56:20

标签: python django models

我的应用程序models.py中有这些模型:

class A(models.Model):
    #some details
    pass


class B(models.Model):
    a = models.ForeignKey(A, null=True, blank=True)
    c = models.ForeignKey(C, null=True, blank=True)

class C(models.Model):
    pass

    def method(self):
        b_list = B.objects.filter(c=self)
        a_list = []
        for b in b_list:
            a_list.append(b.a)

        return a_list

这在我启动网络服务器时给出了一个错误,因为在B中它声明没有定义C。

然后如果我按顺序放置这些模型A C B django告诉我B未在C的方法()中定义。

在这种情况下,如何解决这个“未定义”的问题?它似乎是圆形的!

1 个答案:

答案 0 :(得分:3)

在这种情况下,您始终可以使用字符串:

class A(models.Model):
    #some details
    pass


class B(models.Model):
    a = models.ForeignKey("A", null=True, blank=True) # note the quotes
    c = models.ForeignKey("C", null=True, blank=True) # note the quotes

class C(models.Model):
    pass

如果这是一个更“极端”的情况,你不能使用这个技巧,先声明C,然后AB,然后C.methoddef C_method [...] C.method = C_method)本来可以采用。