2015-09-02 2 views
0

Это две мои 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' 
>>> 

ответ

1

Вам необходимо получить доступ к классу модели, чтобы вызвать статический метод.

Использование a.MyModelB_a.model.my_static_method()

model Атрибут возвращает класс модели MyModelB.

Смежные вопросы