Python Django:如何获取外键';引用的类中的classmethod中的类?

Python Django:如何获取外键';引用的类中的classmethod中的类?,python,django,foreign-keys,static-methods,class-method,Python,Django,Foreign Keys,Static Methods,Class Method,我有以下两个Django类MyClassA和MyClassB在两个单独的文件中MyClassB具有对MyClassA实例的外键引用MyClassA无法导入类MyClassB my_class_a/models.py: from django.db import models class MyClassA(models.Model): name = models.CharField(max_length=50, null=False) @classmethod def m

我有以下两个Django类
MyClassA
MyClassB
在两个单独的文件中
MyClassB
具有对
MyClassA
实例的外键引用
MyClassA
无法导入类
MyClassB

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()??
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"
my_class_b/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()??
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
的类方法
myu方法a
中,我想调用
MyClassB
的静态方法
myu方法b
。我怎么做


如果
my\u method\u a
是一个实例方法,我只需执行
self.MyClassB\u my\u class\u a.model.my\u method\u b()
。但是因为我没有
MyClassA
的实例,所以我不知道怎么做。我想利用相关的\u name字段,它允许反向查找实例。

您可以这样做

@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()
只有将导入添加到文件顶部时,才会发生导入失败。这将导致循环导入无法加载一个模块,因为它依赖于另一个模块,而另一个模块依赖于另一个模块。但是,当导入位于方法内部时,不会出现相同的问题