我的应用程序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的方法()中定义。
在这种情况下,如何解决这个“未定义”的问题?它似乎是圆形的!
答案 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
,然后A
和B
,然后C.method
(def C_method [...] C.method = C_method
)本来可以采用。