Это две мои Django модели, MyModelB
имеет внешний ключ к MyModelA
:Как вызвать статический метод из модели Django «обратная связь»?
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"
я создаю экземпляр MyModelA
и MyModelB
:
>>> 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>]
Но я хочу позвонить MyModelB.my_static_method()
из примера MyModelA
. Как мне это сделать? Мое избранное решение не работает:
>>> 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'
>>>