2012-02-07 221 views
0

我有一个事件模型,其中包含一个“开始时间”字段,该字段以UTC格式存储并映射到数据库。该模型还有一个start_local()帮助程序函数,用于在用户当地时间将事件作为Datetime对象返回。这通过Event实例对用户的引用发生,然后get_profile()具有时区信息。如何在Django模型实例之间共享公共数据?

这可行,但问题是,当我显示长列表事件时,由于用户和配置文件查找,每行有2个数据库查询。这很愚蠢,因为行之间的时区不是可变的,但模型不知道。我目前的设置将时区信息传递给start_local(),这可以解决速度问题,但从设计的角度来看,这并不令人愉快。事件实例知道如何获取用户的时区,并且不得不依赖于调用函数来获得帮助,以避免令人讨厌的大表现。

有没有人有改进将时区信息传递到帮助函数?

回答

0

使用select_related。我忘记了OneToOne选择相关的介绍,但它适用于1.3。

https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.select_related

User.objects.select_related('userprofile') 
# assuming the profile is called userprofile 
Event.objects.select_related('user', 'user__profile') 
+0

这是一个相当不错的答案,确实查询的数量减少几乎我让他们与我目前的解决方案的地步。你的优点是更清洁。 – LVB 2012-02-07 19:52:19