我有一个应用程序,是关于呈现虚构的简化城市。
请考虑下面的Django模型:
class City(models.Model):
name = models.CharField(...)
...
TYPEGROUP_CHOICES = (
(1, 'basic'),
(2, 'extra'),
)
class BldgType(models.Model):
name = models.CharField(...)
group = models.IntegerField(choices=TYPEGROUP_CHOICES)
class Building(models.Model):
created_at = models.DateTimeField(...)
city = models.ForeignKey(City)
type = models.ForeignKey(BldgType)
other_criterion = models.ForeignKey(...)
class Meta:
get_latest_by = 'created_at'
选择这个设置说明:
(1)每个城市都有一个“基本”型的部分房屋建筑物每个城市里面出现一次(例:市政府,消防局,警察局,医院,学校),并可能几十个“额外”类型的建筑物,如舞蹈俱乐部。
(2)在某些视图中,所有的建筑物(无论城市,等等)是根据不同的标准,例如,被过滤other_criterion
。
问题/关注:
在city_detail
观点,我将不得不遍历“额外”的类型,它可以正常的任何建筑物。
但我不知道如何有效地检索城市的“医院”建设,这是“基本”型的,是因为只有一个这样的医院在每个城市的存在,我必须为每个城市做到这一点呢(这是确保在都市创建时间)。
将有最多的“基本”建筑类型,其中约一半将提交所有的时间一打。
我对在城市模型编写的简便方法斜,我面临三种选择:
(A1)通过try
和索引: .filter(...)[0]
(A2)通过try
,并.get(...)
(A3)通过try
和.filter(...).latest()
但这些都不显得优雅。 或者是这三个选项很好用某种缓存合并一个,像Django的get_profile()
的方法, User
模式? 不幸的是,我有没有缓存的经验,但。
它是坚果使用下面的选项?
(二)在城市模型具体FKS,每一个最重要的基本类型
题:
哪个选项是有意义的是什么?
或者是模式一般故障为这种情况的?
特别是关于DB的性能,你有什么建议? 我需要一个完全不同的做法?
请指教! :)
提前致谢!