在我的 Django 项目中,每个 django 用户都有一个配置文件,该配置文件与一个 Info 模型相关。两种关系都是 OneToOne。由于大多数时候我都在为用户使用 Profile 和 Info 模型,所以我希望默认选择这些模型,这样我就不会再次访问数据库。有没有办法使用 Django 身份验证来做到这一点?
问问题
1425 次
2 回答
4
我知道这已经存在了一段时间,但我正在添加我的解决方案以防其他人面临类似情况。Django(从 v1.8 甚至 v1.7 开始)允许您自定义管理器(查询时使用的 .objects )
您可以为 Profile 设置这样的经理:
class ProfileManager(models.Manager):
def get_queryset(self):
return super(ProfileManager,self).get_queryset().select_related('user')
然后在模型中:
class Profile(models.Model):
user = models.OneToOneField(
User,
primary_key=True,
on_delete=models.CASCADE
)
# ... other fields
# the manager
objects = ProfileManager()
# ...
然后您对个人资料的所有查询也将自动选择相关用户。
您也可以扩展此代码以包含Info模型。
于 2016-06-03T08:04:25.877 回答
0
使用 django >=1.5 自定义用户模型使用选择相关功能。
user = User.objects.select_related('profile_related', 'info_related')
于 2014-08-11T11:08:09.247 回答