URL-адрес Django не работает нормально для меня при использовании представления на основе классов - PullRequest
0 голосов
/ 26 мая 2019

Я новичок в 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

мне действительно нужно добавить поле слага?или мне лучше справиться с этой ошибкой?спасибо всем!

1 Ответ

0 голосов
/ 26 мая 2019

Эта ошибка выдает, потому что она ожидает поле слаг или поле 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"))

Lean more slug_url_kwarg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...