gpt4 book ai didi

Django 通过另一个 related_name 使用 related_name 进行查询

转载 作者:行者123 更新时间:2023-12-03 09:59:24 27 4
gpt4 key购买 nike

我有几个模型,它们有一个外键返回到 Django 中的一个模型,该模型有一个外键返回到 auth User。

models.py

class UserDetails(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='userdetail_related')
details = models.CharField(max_length=100)
email = models.EmailField(unique=True)

class UserInformation(models.Model):
user = models.ForeignKey(
UserDetails,
related_name='userinfo_related')
info = models.CharField(max_length=100, default='this')

编辑

  1. 根据 Django 文档,我的 related_name 的实际代码是: related_name='%(app_label)s_%(class)s_lated'。为了便于解释,我在此处放置了“userdetail_lated”。
  2. 每个用户只有一个用户详细信息,但每个用户详细信息有许多用户信息。
  3. 如果存在未注册用户,并且我们已捕获他们的电子邮件,则该电子邮件可以包含与其关联的 UserDetail 和 UserInformation,以供购物车访客结帐系统使用。

在我看来,我想从 self.request.user 访问 UserInformation 模型。

我可以通过以下方式访问我的 View 中的 UserDetails:

details = self.request.user.userdetail_related.filter(
user=self.request.user).first()

但我似乎无法通过以下方式访问 UserInformation:

info = self.request.user.userdetail_related.filter(
user=self.request.user).first().userinfo_related.filter(
info='this').first()

我可以让它发挥作用的唯一方法是:

details = self.request.user.userdetail_related.filter(
user=self.request.user).first()

info = details.userinfo_related.filter(
info='this').first()

但这肯定会两次访问数据库,这是我不想要的。

是否有人有更好的方法使用 session 用户“通过”UserDetails 从 UserInformation 获取信息?

最佳答案

您可以使用以下内容:

user_info = UserInformation.objects.filter(user__user=self.request.user).first()

此外,当您访问 UserDetails 时,您实际上并不需要过滤器,因为您正在尝试从 user 本身访问相关对象。因此,以下内容也可以。

details = self.request.user.userdetail_related.first()

顺便说一句,我认为您在这里需要 OneToOneField,因为一个 user 应该只有一个 UserDetails

关于Django 通过另一个 related_name 使用 related_name 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36907085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com