Как получить первичный ключ из шаблона в django?

#python #django #django-models #django-views #django-templates

#python #django #django-модели #django-просмотры #django-шаблоны

Вопрос:

Здесь я пытаюсь получить идентификатор user_to_toggle, но он не отображается, и я думаю, это потому, что я делаю что-то не так. Меня смущает, как я могу получить идентификатор user_to_toggle. Я получаю его имя пользователя, но мне тоже нужен идентификатор пользователя. Вот мой код.

просмотры, pyy

 class UserProfileFollowToggle(LoginRequiredMixin,View):
    login_url = '/accounts/login/'
    def post(self, request, *args, **kwargs):
            user_pk_to_toggle=kwargs.get('pk') #this is returning None. 
            username_to_toggle = request.POST.get("username")#this is returning me username of toggle user. 
            profile_, is_following = UserProfile.objects.toggle_follow(request.user, request.user.id ,username_to_toggle)
            return redirect(f'/profiles/{username_to_toggle}')
  

follow_to_toggle.html

 <form class='form' method='POST' action="{% url 'profiles:toggle'%}">
{% csrf_token %}
<input type='hidden' name='username' value="{% if username %}{{ username }}{% else %}hello{% endif %}">
<button class='btn {% if is_following %}btn-warning{% else %}btn-primary{% endif %}'>{% if is_following %}Unfollow {% else %}Follow{% endif %}</button>
</form>
  

если требуется больше кода, чем скажите мне, я обновлю свой вопрос с этой информацией.

urls.py

 app_name = 'profiles'

    urlpatterns = [
        path('user-profile/',UserProfileFollowToggle.as_view(),name = 'toggle'),
        path('<str:username>/',UserProfileDetailView.as_view(),name = 'detail'),
    
    ]
  

Комментарии:

1. Добавьте URL-файл, который связан с этим представлением.

2. Я добавил их. Теперь вы можете видеть.

Ответ №1:

kwargs.get('pk') возвращает None , потому что вы на самом деле не указали ни одного аргумента ключевого слова. Если вы хотите, чтобы он возвращал значение, ваш URL-адрес должен выглядеть так user-profile/<int:pk>/ . Таким образом, вы должны соответствующим образом изменить свой шаблон {% url 'toggle' user_to_toggle.id %} . Вам нужно передать user_to_toggle объект в контекст при рендеринге страницы или получить его как-то еще, возможно, через связанный объект модели.