我有2个表,simpleDB_all和simpleDB_some。 “all”表有我想要的每个项目的条目,而“some”表只有一些需要附加信息的项目的条目。这些的Django模型是:
class all(models.Model):
name = models.CharField(max_length=40)
important_info = models.CharField(max_length=40)
class some(models.Model):
all_key = models.OneToOneField(all)
extra_info = models.CharField(max_length=40)
我想创建一个视图,如果“some”中存在额外信息,则显示“all”中的每个项目。由于我使用的是1-1字段,我可以通过几乎完全成功完成此操作:
allitems = all.objects.all()
for item in allitems:
print item.name, item.important_info, item.some.extra_info
但是当我到达“some”表中没有相应条目的项目时,我得到了一个DoesNotExist异常。
理想情况下,我会在模板中执行此循环,因此无法将其包装在“try”子句中。有什么想法吗?
我可以使用如下查询直接在SQL中获得所需的效果:
SELECT all.name, all.important_info, some.extra_info
FROM all LEFT JOIN some ON all.id = some.all_key_id;
但我宁愿不使用原始SQL。
答案 0 :(得分:2)
您不会在模板中获得DoesNotExist
例外 - 它们在设计上被模板系统隐藏。
您提供的SQL,或多或少,当您在查询中使用select_related
时(如果您从2月开始使用Django 1.2或比r12307更新的结帐时):
allitems = all.objects.select_related('some')