我正在构建一个应用程序来帮助我学习 Django……基本上,它只是我拥有的各种媒体(CD、DVD、书籍、设备等)的列表。当然,这完全没用,但我正在尝试找出我在“现实世界”应用程序中可能找到的所有东西。
我想做的是有一个主列表视图,它将从每个类别中选择一些项目。说 5 张 CD、5 本书等,然后将它们全部混合在一个列表中。
首先想到的是查询它们并通过上下文传递它们:
{"books" : Book.objects.all(), "DVDs": DVD.objects.all(), #etc etc etc, }
但我不禁认为这完全是低效的。有没有更好/更快的方法不会对数据库造成如此严重的打击?也许是一种创建“超级”模型的奇特方式,它将轮询其他模型并生成列表?或者其他的东西?
还是Django会缓存这个请求……所以每次请求页面时它都不会命中数据库?
使用继承呢?
class Item(models.Model):
name = models.CharField(max_length=200)
date_added = models.blahblahblah
class Meta:
abstract = True
class DVD(Item):
run_time = models.IntegerField()
director = models.blahblah
class Book(Item):
publisher = etc
author = etc