que tienen un modelo de Django super sencillo aquí:Django Eliminar todo pero el pasado cinco de queryset
class Notification(models.Model):
message = models.TextField()
user = models.ForeignKey(User)
timestamp = models.DateTimeField(default=datetime.datetime.now)
uso de AJAX, puedo comprobar si hay nuevos mensajes cada minuto. Solo muestro las cinco notificaciones más recientes al usuario en cualquier momento. Lo que estoy tratando de evitar es la siguiente situación.
usuario se conecta y no tiene notificaciones. Mientras la ventana del usuario está activa, recibe 10 mensajes nuevos. Como solo le muestro cinco, no es gran cosa. El problema ocurre cuando el usuario comienza a eliminar sus notificaciones. Si elimina los cinco que se muestran, los cinco más antiguos se mostrarán en la próxima llamada ajax o actualizar.
me gustaría tener de mi modelo, salvo método de eliminar todo menos los 5 objetos más recientes cada vez que un nuevo uno se salva. Desafortunadamente, no puedes usar [5:] para hacer esto. ¿Ayuda?
EDITAR
He intentado esto, que no funcionaba como se esperaba (en el método save del modelo):
notes = Notification.objects.filter(user=self.user)[:4]
Notification.objects.exclude(pk__in=notes).delete()
no pude encontrar un patrón en el comportamiento extraño, pero después de una durante las pruebas, solo eliminará la más reciente cuando se cree una nueva. No tengo idea de por qué sería esto. el orden se resuelve en la clase Meta del modelo (por fecha y hora descendiendo). gracias por la ayuda, pero mi camino parece ser el único que funciona de manera consistente.
útil subrayar que el hecho de que no se puede utilizar borrar en una rebanada se explica en el documento: https: //docs.djangoproject.com/en/dev/ref/models/querysets/# delete - genera un 'Can not use' limit 'o' offset 'con el error delete'. ¡Tenía la esperanza de que desde el '09 algo hubiera cambiado, pero la solución "para" todavía parece ser la única! – Stefano