【问题标题】:How can I access a Django model's reverse foreign key from a staticmethod?如何从静态方法访问 Django 模型的反向外键?
【发布时间】:2015-12-21 09:35:40
【问题描述】:

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

我有一个名为 aMyModelA 实例。在a 的方法中,我想调用my_Cstatic_method()。我该怎么做?

a.MyModelB_a.model.my_Bstatic_method() 调用MyModelB 的静态方法。但我不知道如何从MyModelBmodel 属性将MyModelC 的静态方法降低一层。我该怎么做?

令人惊讶的是,对象a.MyModelB_a.model.MyModelC_b 没有model 属性

【问题讨论】:

  • 我不知道你为什么要打扰外键。你有一个静态方法,你可以通过类调用它:MyModelC.my_Cstatic_method()

标签: python django django-queryset django-orm


【解决方案1】:

从模型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()

【讨论】:

  • 对不起 Gwyn,我在写 OP 时很困惑。我已经纠正了它。我有一个MyModelA 的实例,我正在尝试调用MyModelC 的静态方法。
  • 嗯。它不起作用:gist.github.com/saqib-zmi/cbda21d461246df2d225related 属性将我发送回 MyModelB 而不是 MyModelC
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 2014-04-27
  • 2015-06-24
  • 1970-01-01
  • 2015-04-25
  • 2012-02-27
相关资源
最近更新 更多