Как сделать функциональность присоединения к группе и выхода из нее в Django?

def join_group(request,pk):
    group = Room.objects.get(id=pk)
    group.members.add(request.user)
    return redirect('home')

urls.py

path('create_group', views.create_group, name="create-group"),
path('group/<str:pk>', views.group, name="group"),
path('join_group/<str:pk>', views.join_group, name="join_group"),

feed.html

 <a href="{% url 'join_group' group.id %}">  
      <p class="roomListRoom__topic">
        Join
      </p> 
 </a>

У меня есть группа в моем приложении. Я хотел сделать функциональность вступления и выхода. Функциональность присоединения работает правильно, но я хочу сделать так, чтобы когда кто-либо нажимал на (присоединиться), то он должен быть перенаправлен в эту конкретную группу, когда я изменяю return redirect на ' return redirect ('group/' + str(pk)) ' то я получаю url типа 127.0.0.1:8000/join_group/group/8.....

и я хочу сделать так, чтобы если пользователь присоединился к группе, то вместо join и join для других пользователей должно быть joined. - используя оператор if

и я хочу сделать функциональность leave:

пожалуйста, помогите мне избавиться от этих проблем. если вам нужна дополнительная информация. я готов

заранее спасибо!!!

Здесь есть несколько вопросов, поэтому я разделил их ниже:

  1. URL redirect not working - Ваше перенаправление не начинается с прямой косой черты, поэтому путь, который вы указываете для перенаправления, будет добавлен к текущему пути - поэтому у вас сейчас join_group/group/8 - ваши варианты - добавить косую черту или использовать имена URL, например, так:

    redirect('group', pk=pk)

    Это лучший способ управления URL, чем их жесткое кодирование.

  2. Показывать 'Joined' в представлении группы - вы хотите показать в шаблоне, что человек является членом этой группы, вы можете достичь этого, сделав следующее:

    {% if request.user in room.users.all %}
       # show joined or leave 
    {% else %}
       # show join button
    {% endif %}
    

    Это может выглядеть несколько иначе в зависимости от того, какое поле связывает пользователя и комнату.

  3. Создайте представление 'Leave' - вы можете сделать то же самое, что и в представлении join, но в обратном порядке:

    group.members.remove(request.user)
    

https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove

Вернуться на верх