Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

653
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!