Python 如何通过Django中的外键访问filter参数中的数据?

Python 如何通过Django中的外键访问filter参数中的数据?,python,django,django-models,foreign-keys,django-views,Python,Django,Django Models,Foreign Keys,Django Views,我有两个模型: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=

我有两个模型: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)
用户模型包含用户名、名、姓和密码等字段

在我看来,我希望使用位于用户对象中的username字段查找UserProfile对象。要使用username字段过滤/获取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 = UserProfile.objects.filter(user__username=request.user.username)
但是,在您的情况下,您不需要这样做。request.user是一个用户对象,因此要获取其用户配置文件,只需执行以下操作:

甚至:

UserProfile.objects.get(user=request.user)
请注意,第一个示例应该返回一个带有1个结果的QuerySet,而第二个示例返回一个对象。换言之:

request.user.get_profile() == 
    UserProfile.objects.filter(user__username=request.user.username)[0]
使用双下划线来遍历关系。例如:

user = UserProfile.objects.filter(user__username=request.user.username)
但是,在您的情况下,您不需要这样做。request.user是一个用户对象,因此要获取其用户配置文件,只需执行以下操作:

甚至:

UserProfile.objects.get(user=request.user)
请注意,第一个示例应该返回一个带有1个结果的QuerySet,而第二个示例返回一个对象。换言之:

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

顺便说一句,您实际上并没有使用用户。。这是故意的吗?是的,我稍后会在模板中使用它,只是在上面的示例中没有使用它?顺便说一句,您实际上并没有使用user。。这是故意的吗?是的,我稍后会在模板中使用它,只是不在上面的示例中?太棒了!有可能从另一条路穿过吗?我有一个用户对象,我想找到与其关联的UserProfile。记住,request.User是一个用户对象。太棒了!有可能从另一条路穿过吗?我有一个用户对象,我想找到与其关联的UserProfile。记住,request.User是一个用户对象。