如何从静态方法访问Django模型的反向外键?

时间:2015-09-23 22:00:25

标签: python django django-queryset django-orm

假设我有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属性

1 个答案:

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