【问题标题】:Django: How can I get the foreign key's class from a classmethod in the referred-to class?Django:如何从被引用类中的类方法中获取外键类?
【发布时间】:2016-09-15 23:52:10
【问题描述】:

我在两个单独的文件中有以下两个 Django 类 MyClassAMyClassBMyClassB 具有对 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()??

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 的实例,所以我不知道该怎么做。我想利用允许反向查找实例的相关名称字段。

【问题讨论】:

    标签: python django foreign-keys static-methods class-method


    【解决方案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()
    

    仅当您将导入添加到文件顶部时才会发生导入失败。这将导致循环导入一个模块无法加载,因为它依赖于另一个依赖于另一个模块的模块。但是,当导入在方法内部时,不会出现同样的问题。

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多