Я новичок в 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
template
<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")
)
это показывает мне этоследующая ошибка:
AttributeError в / account / profile / sm10547 / Общий подробный вид UserDetail должен быть вызван с объектом pk или слагом в URLconf.Метод запроса: GET URL запроса: http://0.0.0.0:8000/account/profile/sm10547/ Версия Django: 2.2.1 Тип исключения: AttributeError Значение исключения:
Общий подробный вид UserDetail должен вызываться либо с объектом pk, либо слизнем в URLconf.Расположение исключения: /usr/local/lib/python3.7/site-packages/django/views/generic/detail.py в get_object, строка 47 Исполняемый файл 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
мне действительно нужно добавить поле слага?или мне лучше справиться с этой ошибкой?спасибо всем!