如何根据用户名获取用户个人资料?

how to get user profile based on username?

我如何根据他的用户名而不是 id 获取用户配置文件,我只尝试 slug_filed 它告诉我没有用户名选择,我做了这个获取对象方法但它没有工作

views.py

class ProfileDetail(DetailView):
    model = Profile
    template_name = 'profile.html'
    slug_field = "username"

    def get_object(self):
        username = self.kwargs.get('username')
        return get_object_or_404(User, username=User.username)

models.py

from django.db import models
from django.contrib.auth.models import User
from PIL import Image

class Profile(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    bio = models.TextField()
    picture = models.ImageField(upload_to='profile_pics')

    def __str__(self):
       return str(self.user)

    def save(self, *args, **kwargs):
       super().save(*args, **kwargs)

urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
from users.views import register, UpdateUserView, ProfileDetail
from django.contrib.auth import views as auth_views


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('core.urls')),
    path('register', register, name="register"),
    path('accounts/', include('allauth.urls')),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
    path('settings', UpdateUserView.as_view(), name='settings'),

    path('profile/<slug>', ProfileDetail.as_view(), name='profile'),]

你的 slug 字段应该是这样的。

class ProfileDetail(DetailView):
    model = Profile
    template_name = 'profile.html'
    <b>slug_field = "user__username"</b></pre>

而且您也不需要覆盖 get_object 方法。