【问题标题】:How to call a static method from a Django model "backward link"?如何从 Django 模型“反向链接”调用静态方法?
【发布时间】:2015-09-02 22:34:04
【问题描述】:

这是我的两个 Django 模型,MyModelB 有一个指向 MyModelA 的外键:

from django.db import models


class MyModelA(models.Model):
    my_int = models.IntegerField()

    def __str__(self):
        return "MyModelA #%s: my_int=%s" % (
            self.pk,
            self.my_int,
        )

class MyModelB(models.Model):
    my_int = models.IntegerField()
    my_a = models.ForeignKey(MyModelA, related_name="MyModelB_a")

    def __str__(self):
        return "MyModelB #%s: my_int=%s" % (
            self.pk,
            self.my_int,
        )

    @staticmethod
    def my_static_method():
        return "Hello"

我创建了MyModelAMyModelB 的实例:

>>> a = MyModelA(my_int=20)
>>> a.save()
>>> a
<MyModelA: MyModelA #3: my_int=20>

>>> b = MyModelB(my_int=30, my_a=a)
>>> b.save()
>>> b
<MyModelB: MyModelB #3: my_int=30>

MyModelA 的实例中,我可以使用“反向链接”引用MyModelB

>>> a.MyModelB_a.filter(my_int=30)
[<MyModelB: MyModelB #3: my_int=30>]

但我想从MyModelA 的实例调用MyModelB.my_static_method()。我该怎么做?我尝试的解决方案不起作用:

>>> a.MyModelB_a.my_static_method()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'RelatedManager' object has no attribute 'my_static_method'
>>>

【问题讨论】:

    标签: python django orm foreign-keys


    【解决方案1】:

    您必须访问模型类才能调用静态方法。

    使用a.MyModelB_a.model.my_static_method()

    model 属性返回模型类MyModelB

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 2010-12-02
      • 2015-06-24
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 2017-05-19
      相关资源
      最近更新 更多