Django:如何从引用的 class 中的 class 方法获取外键的 class?
Django: How can I get the foreign key's class from a classmethod in the referred-to class?
我在两个单独的文件中有以下两个 Django 类 MyClassA
和 MyClassB
。 MyClassB
有一个指向 MyClassA
实例的外键引用。 MyClassA
无法导入 class 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()??
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
的 class 方法 my_method_a
中调用 MyClassB
的静态方法 my_method_b
。我该怎么做?
如果my_method_a
是一个实例方法,我会简单地做self.MyClassB_my_class_a.model.my_method_b()
。但是由于我没有 MyClassA
的实例,我不知道该怎么做。我想利用允许反向查找实例的 related_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()
仅当您将导入添加到文件顶部时才会发生导入失败。这将导致循环导入一个模块无法加载,因为它依赖于另一个模块,而另一个模块又依赖于另一个模块。但是,当导入在方法内部时,不会出现相同的问题。
我在两个单独的文件中有以下两个 Django 类 MyClassA
和 MyClassB
。 MyClassB
有一个指向 MyClassA
实例的外键引用。 MyClassA
无法导入 class 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()??
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
的 class 方法 my_method_a
中调用 MyClassB
的静态方法 my_method_b
。我该怎么做?
如果my_method_a
是一个实例方法,我会简单地做self.MyClassB_my_class_a.model.my_method_b()
。但是由于我没有 MyClassA
的实例,我不知道该怎么做。我想利用允许反向查找实例的 related_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()
仅当您将导入添加到文件顶部时才会发生导入失败。这将导致循环导入一个模块无法加载,因为它依赖于另一个模块,而另一个模块又依赖于另一个模块。但是,当导入在方法内部时,不会出现相同的问题。