【问题标题】:Django: How to do reverse foreign key lookup of another class without an instance of this class?Django:如何在没有此类实例的情况下对另一个类进行反向外键查找?
【发布时间】:2023-04-05 17:29:02
【问题描述】:

我有以下两个 Django 类 MyClassAMyClassB

MyClassB 具有对 MyClassA 实例的外键引用。

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()??


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的实例,所以我不知道该怎么做。

我可以使用cls 代替self 吗?

【问题讨论】:

  • 不是重复的。我问的是当你没有 MyClassA 的实例时如何做到这一点。
  • 道歉 - 撤回投票。

标签: python django static-methods class-method instance-method


【解决方案1】:

由于它是staticmethod,因此您不需要实例。

您可以直接拨打MyClassB.my_method_b()

【讨论】:

  • my_method_a(),它不知道MyClassB。它们位于单独的文件中。我可以使用related_name 字段从my_method_a()my_method_b() 吗?
  • 那又怎样?只需导入 MyClassB。如果您出于某种原因不想这样做,可以改用get_model(app_label, model_name='MyClassB')
猜你喜欢
  • 2011-11-21
  • 2013-02-12
  • 1970-01-01
  • 2012-02-07
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
相关资源
最近更新 更多