假设我有3个Django模型:
class MyModelA(models.Model):
my_int = models.IntegerField()
@staticmethod
def my_Astatic_method():
return "AHello"
class MyModelB(models.Model):
my_int = models.IntegerField()
my_a = models.ForeignKey(MyModelA, related_name="MyModelB_a")
@staticmethod
def my_Bstatic_method():
return "BHello"
class MyModelC(models.Model):
my_int = models.IntegerField()
my_b = models.ForeignKey(MyModelB, related_name="MyModelC_b")
@staticmethod
def my_Cstatic_method():
return "CHello"
我有一个名为MyModelA
的{{1}}实例。在a
的方法中,我想致电a
。我该怎么办?
my_Cstatic_method()
可以调用a.MyModelB_a.model.my_Bstatic_method()
的静态方法。但我不知道如何从MyModelB
的{{1}}属性中将{1}}的静态方法降低到一级。我该怎么办?
令人惊讶的是,对象MyModelC
MyModelB
属性
答案 0 :(得分:0)
从模型A访问模型B后,您不再拥有模型实例,而是模型类。
使用类,没有字段,而是字段描述符,也适用于相关字段,所以这里有MyModelC_b
:
a.MyModelB_a.model.MyModelC_b
但是,正如我所说,这不是一个字段,但它将相关模型引用为属性related
中的子属性:
a.MyModelB_a.model.MyModelC_b.related.model
使用它,你现在可以从模型C中获得静态函数
a.MyModelB_a.model.MyModelC_b.related.model.my_Cstatic_method()