【问题标题】:How to access data in filter parameter through a foreign key in Django?如何通过Django中的外键访问过滤器参数中的数据?
【发布时间】:2012-08-10 07:49:18
【问题描述】:

我有两个模型:User(由 Django 预定义)和 UserProfile,它们通过外键连接。

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="connect")
    location = models.CharField(max_length=20, choices=LOCATION_CHOICES)
    gender = models.CharField(max_length=20, choices=GENDER_CHOICES)

User 模型包含诸如用户名、名字、姓氏和密码等字段。

在我看来,我想使用位于用户对象中的用户名字段来查找用户配置文件对象。要使用用户名字段过滤/获取 UserProfile 对象,我需要“遍历”外键以访问用户模型。

但是,我在尝试执行此操作时遇到了几个错误。有谁知道我该怎么做?

这是我目前所拥有的:

def edit(request):
    #the line below is where I am facing troubles. 
    #The error I'm getting is SyntaxError: keyword can't be an expression
    user = UserProfile.objects.filter(user.username=request.user.username)

    form1 = UserEditForm()
    form2 = UserProfileEditForm()
    c = RequestContext(request, {
        'action': 'update/',
        'button': 'Update', 
        'form1': form1,
        'form2': form2,
        })
    return render_to_response('registration/user_profile.html', c)

有谁知道如何解决这个问题?谢谢!

【问题讨论】:

  • 顺便说一句,您实际上并没有使用user..这是故意的吗?
  • 是的,我稍后会在模板中使用它
  • 好的,只是上面的例子中没有?

标签: python django django-models foreign-keys django-views


【解决方案1】:

使用双下划线 (__) 来遍历关系。例如:

user = UserProfile.objects.filter(user__username=request.user.username)

但是,在您的情况下,您不需要这样做。 request.user 一个 User 对象,所以要获得他们的 UserProfile 只需这样做:

user = request.user.get_profile()

甚至:

UserProfile.objects.get(user=request.user)

请注意,您的第一个示例应返回带有 1 个结果的 QuerySet,而第二个示例应返回单个对象。换句话说:

request.user.get_profile() == 
    UserProfile.objects.filter(user__username=request.user.username)[0]

【讨论】:

  • 太棒了!是否可以通过其他方式遍历?我有一个用户对象,我想找到与之关联的 UserProfile。
  • 记住,request.user 是一个 User 对象。
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
相关资源
最近更新 更多