2016-09-15 9 views
1

私は次の2つのDjangoクラスMyClassAMyClassBを2つの別々のファイルに持っています。 MyClassBには、MyClassAのインスタンスへの外部キー参照があります。 MyClassAは、MyClassBクラスをインポートできません。Django:参照されるクラスのクラスメソッドから外部キーのクラスを取得するにはどうすればよいですか?

my_class_a/models.py:

from django.db import models 
class MyClassA(models.Model): 
    name = models.CharField(max_length=50, null=False) 

    @classmethod 
    def my_method_a(cls): 
     # What do I put here to call MyClassB.my_method_b()?? 

my_class_b/models.py:

from my_class_a.models import MyClassA 
from django.db import models 

class MyClassB(models.Model): 
    name = models.CharField(max_length=50, null=False) 
    my_class_a = models.ForeignKey(MyClassA, related_name="MyClassB_my_class_a") 

    @staticmethod 
    def my_method_b(): 
     return "Hello" 

MyClassA内からの静的メソッドのクラスメソッドmy_method_a、私はMyClassBを呼び出すしたいと思います "my_method_b 。どうしたらいいですか?

my_method_aがインスタンスメソッドの場合、私は単にself.MyClassB_my_class_a.model.my_method_b()を実行します。しかし、私はMyClassAのインスタンスを持っていないので、私はそれを行う方法を知らない。私はインスタンスの逆引き参照を可能にするrelated_nameフィールドを利用したいと思います。

答えて

1

このようにすることができます。

@classmethod 
def my_method_a(cls): 
    from myclass_b.models import MyClassB 
    # yes, you can have an import here. and it will not 
    # lead to a cyclic import error 
    MyClassB.my_method_b() 

インポートエラーは、ファイルの先頭にインポートを追加した場合にのみ発生します。それは、他のモジュールに依存する別のモジュールに依存するため、1つのモジュールを読み込むことができない循環インポートにつながります。しかし、インポートがメソッド内にある場合、同じ問題は発生しません。

関連する問題