6

在我的 Django 项目中,每个 django 用户都有一个配置文件,该配置文件与一个 Info 模型相关。两种关系都是 OneToOne。由于大多数时候我都在为用户使用 Profile 和 Info 模型,所以我希望默认选择这些模型,这样我就不会再次访问数据库。有没有办法使用 Django 身份验证来做到这一点?

4

2 回答 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 回答