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/
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:
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 utilizarname=pk
, deberías estar utilizandopk=pk
. Esto debería solucionar el problema.Tu vista
delete_room
debería verse así:Tu archivo
urls.py
debería verse así:Tu HTML debería verse así:
html
<a class="btn btn-danger" href="{% url 'delete_room' pk=room.pk %}">Eliminar Habitación</a>