【问题标题】:Using the user_username instead of user_id to access a user profile使用 user_username 而不是 user_id 来访问用户配置文件
【发布时间】:2021-02-13 15:47:18
【问题描述】:

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

我有如下视图,其中传入的参数是 user_username:

views.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
    })

我知道我们不能将用户设置为等于 user_username 那么有没有办法将用户名转换为一个 ID,然后我可以使用它来访问相关的 Profile 对象?我这样做是因为在我的 urls.py 中,我希望 url 显示用户的用户名,而不仅仅是数字 id。

urls.py

path("profile/<str:user_username>", views.profile_page, name="profile"),

编辑添加:

models.py

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)

【问题讨论】:

    标签: python django django-models django-views django-urls


    【解决方案1】:

    您可以过滤用户的username

    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
        })

    注意:通常最好使用get_object_or_404(…) [Django-doc], 然后直接使用.get(…) [Django-doc]。如果对象不存在, 例如,由于用户自己更改了 URL,get_object_or_404(…) 将导致返回 HTTP 404 Not Found 响应,而使用 .get(…) 将导致 HTTP 500 服务器错误

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      相关资源
      最近更新 更多