在django

时间:2016-01-10 10:47:12

标签: python django

我有两个相同的模型,让我们在django中说X和Y像这样:

class X(models.Model):
    con = models.CharField(max_length=100)
    a = models.ForeignField("FOO")

class Y(models.Model):
    con = models.CharField(max_length=100)
    b = models.ForeignField("BAR")

要访问这些模型的对象,我必须使用以下代码:

models.X.objects.get(
    con = "something",
    a = xy
)

models.Y.objects.get(
    con = "something",
    b = yx
)

有没有办法将模型名称设置为变量,例如model_name = X,然后使用此代码访问对象:

models.model_name.objects.get(**my_dict)

,其中

my_dict = {"con":"something", "a":xy}

2 个答案:

答案 0 :(得分:2)

你可以这样做:

getattr(models, model_name).objects.get(**my_dict)

它允许您通过字符串或变量访问models的属性。

答案 1 :(得分:1)

你当然可以:

setattr(models, 'model_name', models.X)

这会将model_name属性设置为models.X(或models.Y),这将使您的呼叫models.model_name.objects.get(**my_dict)成功。

或者,您可以在开始工作之前保存要在变量中使用的模型,然后再使用它:

model_name = models.X
model_name.objects.get(**my_dict)