我是Django的新手,现在我正在使用Django2.2。 场景是当用户单击菜单上的配置文件选项时,它将带用户进入其用户配置文件
models.py
class UserProfile(auth.models.AbstractUser):
image = models.ImageField(upload_to=get_image_path,
max_length=100,
blank=True,
null=True,
default='account_users/default/profile_image/default.png')
class Meta:
verbose_name = "account_user"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
模板
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenu1">
<li>
<a href="{% url 'account:user_profile_detail' username=userprofile.username %}" class="btn btn-simple">Profile</a>
</li>
</ul>
urls.py
urlpatterns = [
path("profile/<str:username>/", views.UserDetail.as_view(), name="user_profile_detail"),
]
views.py
class UserDetail(DetailView):
model = models.UserProfile
template_name = "userprofile_detail.html"
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(
userprofile__username__iexact=self.kwargs.get("username")
)
它向我显示以下错误:
/ account / profile / sm10547 /中的 AttributeError
通用详细信息视图UserDetail必须使用URLconf中的对象pk或slug调用。
请求方法:GET
要求网址:http://0.0.0.0:8000/account/profile/sm10547/
Django版本:2.2.1
异常类型:AttributeError
异常值:
通用详细信息视图UserDetail必须使用URLconf中的对象pk或slug调用。
异常位置:get_object,第47行中的/usr/local/lib/python3.7/site-packages/django/views/generic/detail.py
Python可执行文件:/ usr / local / bin / python
Python版本:3.7.2
更新:抱歉,我在这里更新当前情况,现在是结构 是:
models.py
class UserProfile(auth.models.AbstractUser):
image = models.ImageField(upload_to=get_image_path,
max_length=100,
blank=True,
null=True,
default='account_users/default/profile_image/default.png')
class Meta:
verbose_name = "account_user"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
模板
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenu1">
<li>
<a href="{% url 'account:user_profile_detail' username=userprofile.username %}" class="btn btn-simple">Profile</a>
</li>
</ul>
url.py
urlpatterns = [
path("profile/<slug:username>/", views.UserDetail.as_view(), name="user_profile_detail"),
]
view.py
class UserDetail(DetailView):
model = models.UserProfile
template_name = "userprofile_detail.html"
slug_url_kwarg = 'username'
def get_queryset(self) :
queryset = super().get_queryset()
return queryset.filter(username__iexact=self.kwargs.get("username"))
然后它将引发错误:
Exception Value:
Cannot resolve keyword 'slug' into field. Choices are: date_joined, email, first_name, groups, id, image, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, posts, user_permissions, username
我真的需要添加子弹字段吗?还是有什么更好的办法来解决这个错误?谢谢大家!
答案 0 :(得分:0)
抛出此错误是因为它期望一个从属字段或pk字段 在这里更改
class UserDetail(DetailView):
model = models.UserProfile
template_name = "userprofile_detail.html"
slug_url_kwarg = 'username'
在url.py
中path("profile/<slug:username>/", views.UserDetail.as_view(), name="user_profile_detail"),
在views.py
return queryset.filter(username__iexact=self.kwargs.get("username"))