Python 使用用户\用户名而不是用户\ id访问用户配置文件

Python 使用用户\用户名而不是用户\ id访问用户配置文件,python,django,django-models,django-views,django-urls,Python,Django,Django Models,Django Views,Django Urls,如何通过用户名而不是id访问模型对象,或者如何将用户名转换为可用于访问模型对象的id 我有一个如下视图,其中传入的参数是用户\用户名: 视图.py def profile_page(request, user_username): form = FollowUserForm(request) profile = Profile.objects.get(user=user_username) return render(request, "network/prof

如何通过用户名而不是id访问模型对象,或者如何将用户名转换为可用于访问模型对象的id

我有一个如下视图,其中传入的参数是用户\用户名:

视图.py

def profile_page(request, user_username):
    form = FollowUserForm(request)
    profile = Profile.objects.get(user=user_username)
    return render(request, "network/profilePage.html", {
        "form": form,
        "profile": profile
    })
path("profile/<str:user_username>", views.profile_page, name="profile"),
class User(AbstractUser):
    pass


class Profile(models.Model):
    user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
    friends = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)
我知道我们不能将用户设置为等于user_username,那么有没有办法将用户名转换为id,然后我可以使用该id访问相关的配置文件对象?我这样做是因为在myurls.py中,我希望url显示用户的用户名,而不仅仅是一个数字id

url.py

def profile_page(request, user_username):
    form = FollowUserForm(request)
    profile = Profile.objects.get(user=user_username)
    return render(request, "network/profilePage.html", {
        "form": form,
        "profile": profile
    })
path("profile/<str:user_username>", views.profile_page, name="profile"),
class User(AbstractUser):
    pass


class Profile(models.Model):
    user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
    friends = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)

您可以使用以下选项筛选用户的
用户名

from django.shortcuts import get_object_or_404

def profile_page(request, user_username):
    profile = get_object_or_404(Profile, user__username=user_username)
    form = FollowUserForm(request)
    return render(request, 'network/profilePage.html', {
        'form': form,
        'profile': profile
    })
从django.shortcuts导入get\u object\u或\u 404
def配置文件页面(请求、用户用户名):
profile=get\u object\u或\u 404(profile,user\u username=user\u username)
表单=FollowUserForm(请求)
返回呈现(请求'network/profilePage.html'{
“形式”:形式,
“配置文件”:配置文件
})

注意:使用, 然后直接使用。如果对象不存在, 例如,由于用户自己更改了URL,
get\u object\u或_404(…)
将返回HTTP 404 Not Found响应,而使用
.get(…)
将导致HTTP 500服务器错误