使用Django查询获取相关模型

时间:2014-01-29 12:21:35

标签: python django django-queryset

你能帮我解决Django查询吗?我是新手,我正在尝试优化我的网站中的查询。以下是目前的情况: 我使用标准用户模型作为基本模型,并且有3种类型的用户,它们与之相关:A,B和C.“用户”只能与这3个模型中的一个相关。目前我有一个包含Model D实例的列表,它也与User有关。 以下是我的代码

D = D.objects.all()
for element in D:
try:
     results.append(element.user.A)
except:
    try:
        results.append(element.user.B)
    except:
        results.append(element.user.C)

正如您已经注意到的那样,在这种情况下,这种解决方案并不是最好的(也许这是最糟糕的)。我感谢任何帮助。 提前谢谢。

编辑:这是和我的模特:

class A(models.Model)
    facebook_id = models.CharField(max_length=20, blank=True, null=True)
    user = models.OneToOneField(User, unique=True)
    ...

class B(models.Model)
    user = models.OneToOneField(User, unique=True)
    ...

class C(models.Model)
    user = models.OneToOneField(User, unique=True)
    ...

class D(models.Model):
    user = models.ForeignKey(User)
    F = models.ForeignKey(F)

1 个答案:

答案 0 :(得分:1)

前段时间我实际上遇到了同样的问题,如果我再次这样做,无论模型有多么不同,我都会关注remy_g的提示。

话虽如此,你可以使用hasattr()代替凌乱的try / except nest。

http://docs.python.org/2/library/functions.html#getattr

它会是什么样子:

D = D.objects.all()
for element in D:
    if hasattr(element.user, "A"):
        results.append(element.user.A)
    elif hasattr(element.user, "B"):
        results.append(element.user.B)
    elif hasattr(element.user, "C"):
        results.append(element.user.C)

你可以根据自己的喜好进行改进,但是你明白了......

希望这有帮助,

此致