2015-09-02 50 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" 

我創建的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' 
>>> 

回答

1

您必須訪問模型類才能調用靜態方法。

使用a.MyModelB_a.model.my_static_method()

model屬性返回模型類MyModelB

相關問題