如何在Django模型实例之间共享公共数据?

时间:2012-02-07 19:08:07

标签: django django-models

我有一个包含“开始时间”字段的事件模型,该字段以UTC格式存储并映射到数据库。该模型还有一个start_local()辅助函数,它将事件作为Datetime对象返回到用户的本地时间。这通过Event实例对User的引用,然后是get_profile()具有时区信息来实现。

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

是否有人对将时区信息传递给辅助函数有所改进?

1 个答案:

答案 0 :(得分: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')