如何在Django中使用字符串调用queryset?

如何在Django中使用字符串调用queryset?,django,django-models,django-orm,Django,Django Models,Django Orm,我有两个模型,其中外键引用了第三个模型。是这样的: 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') my_str = 'm1

我有两个模型,其中外键引用了第三个模型。是这样的:

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')
my_str = 'm1'
foo.my_str+'_related'.objects.all()
现在,假设我有一个
Foo
的实例和一个
'm1'
'm2'
字符串。如何使用此字符串使用相关名称调用相应的queryset

大概是这样的:

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')
my_str = 'm1'
foo.my_str+'_related'.objects.all()
显然,上面的代码在很多方面都是错误的,但希望这能说明问题。我不想使用if-else条件,因为模型的数量会很多,所有相关的名称都将遵循相同的模式

谢谢。

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

my_str = 'm1'
getattr(foo, my_str+'_related').objects.all()
my_str='m1'
getattr(foo,my_str+“u related”).objects.all()
调用
getattr(x,'y')
相当于
x.y
(请注意,在
getattr(…)
中,
'y
'是一个字符串。因此,我们可以使用
getattr(…)
获取属性。

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

my_str = 'm1'
getattr(foo, my_str+'_related').objects.all()
my_str='m1'
getattr(foo,my_str+“u related”).objects.all()

调用
getattr(x,'y')
相当于
x.y
(请注意,在
getattr(…)
中,
'y
是一个字符串。因此我们可以使用
getattr(…)
获取属性。

您读过文档吗?您读过文档吗?