Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

659
Vistas
Cómo recuperar datos usando id o pk en django

Estoy trabajando en un proyecto, pero después de probar varias formas, todavía no pude encontrar la solución. Necesito obtener la sala actual en la página para que el usuario pueda dejar la sala, soy consciente de que tiene que ver con hacer consultas o usar pk, id. (Mi primera pregunta, lo siento si no es la forma correcta de preguntar).

Este es el código de Views.py:

 def leave_room(request, room): room = request.GET['room.pk'] room_details = Room.objects.get(name=room) messages = Messages.objects.filter(room=room_details.pk) membership = RoomMember.objects.filter(user=request.user, room=messages) membership.delete() return redirect("/")

urls.py:

 path("leave/<int:pk>/join/", views.leave_room, name="leave_room"),

html:

 <a class="btn btn-danger" href="{% url 'leave_room' pk=room.pk %}">Leave Room</a>

modelos.py:

 class Room(models.Model): name = models.CharField(max_length=100) about = models.TextField(max_length=500, null=True, blank=True) creator = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='room_creator') members = models.ManyToManyField(User, through="RoomMember") class RoomMember(models.Model): approved = models.BooleanField(default=False, blank=False) room = models.ForeignKey(Room, related_name='memberships', on_delete=models.CASCADE) user = models.ForeignKey(User, related_name='user_groups', on_delete=models.CASCADE) class Messages(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, null=False, blank=False) text = models.CharField(max_length=10000, blank=False, null=False) date = models.DateTimeField(default=datetime.now) room = models.ForeignKey(Room, null=True, blank=False, on_delete=models.CASCADE)
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Dado que tiene un parámetro <int:pk> , la clave principal de la sala se pasa a través del parámetro pk . Por lo tanto, esto significa que leave_room debe implementarse como:

 from django.contrib.auth.decorators import login_required from django.views.decorators.http import require_POST @require_POST @login_required def leave_room(request, pk): nitems, __ = RoomMember.objects.filter( user=request.user, room_id=pk ).delete() if not nitems: raise Http404 else: return redirect(' name-of-some-view ')

El enlace de eliminación es, por lo tanto, un mini formulario para realizar una solicitud POST a la vista:

 < form method="post" action="{% url 'leave_room' pk=room.pk %}" > {% csrf_token %} <button type="submit" class="btn btn-danger">Leave Room</button> </form>

Nota :la sección 9 del protocolo HTTP especifica que las solicitudes como GET y HEAD no deben tener efectos secundarios, por lo que no debe cambiar entidades con tales solicitudes. Normalmente se utilizan solicitudes POST, PUT, PATCH y DELETE para esto. En ese caso, crea un pequeño <form> que activará una solicitud POST, o usa algunas llamadas AJAX.


Nota : puede limitar las vistas a una vista para usuarios autenticados con el decorador @login_required [Django-doc] .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda