如何在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(…)
获取属性。您读过文档吗?您读过文档吗?