我有一个包含“开始时间”字段的事件模型,该字段以UTC格式存储并映射到数据库。该模型还有一个start_local()
辅助函数,它将事件作为Datetime对象返回到用户的本地时间。这通过Event实例对User的引用,然后是get_profile()
具有时区信息来实现。
这样可行,但问题是当我显示长事件列表时,由于用户和配置文件查找,每行有2个数据库查询。这很愚蠢,因为行之间的时区不可变,但模型并不知道。我当前的设置将时区信息传递给start_local()
,这解决了速度问题,但从设计角度来看并不是很愉快。事件实例知道如何获取用户的时区,并且不得不依靠调用函数来帮助避免他讨厌的大性能。
是否有人对将时区信息传递给辅助函数有所改进?
答案 0 :(得分:0)
使用select_related
。我忘了OneToOne选择相关的时候,但它适用于1.3。
User.objects.select_related('userprofile')
# assuming the profile is called userprofile
Event.objects.select_related('user', 'user__profile')