如何使用字符串调用 Django 中的查询集?

How to use a string to call a queryset in Django?

我有 2 个模型具有引用第三个模型的外键。它是这样的:

class Foo(models.Model):
    ...

class Model1(models.Model):
    foo = models.ForeignKey(Foo, related_name='m1_related')

class Model2(models.Model):
    foo = models.ForeignKey(Foo, related_name='m2_related')

现在,假设我有一个 Foo 的实例和一个 'm1''m2' 的字符串。如何使用此字符串通过相关名称调用适当的查询集?

像这样:

my_str = 'm1'
foo.my_str+'_related'.objects.all()

显然,上面的代码在很多方面都是错误的,但希望这能说明问题。我不想为此使用 if else 条件,因为模型的数量会很多,并且它们的所有相关名称都将遵循相同的模式。

谢谢。

您可以使用getattr(..)获取属性的名称,例如:

my_str = 'm1'
<b>getattr(</b>foo, my_str+'_related'<b>)</b>.objects.all()

getattr(x, 'y')的调用等同于x.y(注意在getattr(..)'y'是一个字符串。所以我们可以使用getattr(..)获取属性。