es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo eliminar un modelo filtrando por pk

Estoy tratando de eliminar un modelo completo usando pk, pero cuando hago clic en “eliminar” soy redirigido a la página correspondiente pero nada sucede y el modelo sigue ahí sin eliminarse, pero cuando escribo el ‘room_name’ en lugar de ‘pk’ sí funciona (gracias de antemano).

*Views.py:

def delete_room(request, pk):
Room.objects.filter(name=pk).delete()
return redirect(‘home’)

Urls.py:

path(“delete//”, views.delete_room, name=”delete_room”)

Models.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)

Html:

Eliminar habitación*

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando eliminar un modelo de Habitación utilizando la clave primaria (pk) del modelo. Sin embargo, cuando haces clic en el botón “eliminar”, te redireccionan a la página correspondiente pero el modelo todavía está ahí y no ha sido eliminado.

    Parece que estás usando el parámetro equivocado en tu vista delete_room. En lugar de utilizar name=pk, deberías estar utilizando pk=pk. Esto debería solucionar el problema.

    Tu vista delete_room debería verse así:

    def delete_room(request, pk):
        Room.objects.filter(pk=pk).delete()
        return redirect('home')
    

    Tu archivo urls.py debería verse así:

    path("delete/<int:pk>/", views.delete_room, name="delete_room")
    

    Tu HTML debería verse así:
    html
    <a class="btn btn-danger" href="{% url 'delete_room' pk=room.pk %}">Eliminar Habitación</a>

Comments are closed.