如何使用字符串调用 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(..)
获取属性。
我有 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(..)
获取属性。