如何根据用户名获取用户个人资料?
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
方法。
我如何根据他的用户名而不是 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
方法。