你能帮我解决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)
答案 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)
你可以根据自己的喜好进行改进,但是你明白了......
希望这有帮助,
此致