您能帮我查询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)
实际上,我前段时间也遇到过同样的问题,如果我要再做一次,无论模型有多么不同,我都会遵循remy_g的提示。
话虽这么说,但您可以使用hasattr()代替混乱的try /除了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)
您可以根据自己的喜好对此进行改进,但是您知道了...
希望这可以帮助,
问候,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句