Actualización 2:
(Después de leer los comentarios de OP) Yo sugiero agregar un nuevo modelo para realizar un seguimiento de la última presentación. Llámelo LatestSubmission
.
class LatestSubmission(models.Model):
user = models.ForeignKey(User)
problem = models.ForeignKey(Problem)
submission = models.ForeignKey(Submission)
A continuación, puede
- anulación
Submission.save()
para crear/actualizar la entrada en LatestSubmission
cada vez que un usuario publica una nueva solución para un problema
- adjuntar una función que hace lo mismo a una adecuado signal.
tal que LatestSubmission
contendrá una fila por combinación de usuario-usuario de problema que apunte a la última presentación del problema por cada usuario. Una vez que tenga esto en su lugar se puede disparar una sola consulta:
LatestSubmission.objects.all().order_by('problem')
actualización:
Desde el PO ha publicado código de ejemplo, la solución puede cambiarse de la siguiente manera:
for user in User.objects.all(): # Get all users
user.submission_set.latest('time') # Pick the latest submission based on time.
Original Respuesta
En ausencia de cualquier fecha/hora basada Para decidir qué es "más antiguo" o "más nuevo", puede usar la clave principal (id
) del Submission
para "descuidar los antiguos".
for user in User.objects.all(): # Get all users
user.submission_set.latest('id') # Pick the latest submission by each user.
¿Qué quiere decir con "campo que tiene un usuario y un problema"? ¿Estás hablando de los modelos de Django? Publica el código relevante. –
modelos son así: Problema: título, cuestionar de presentación: problema (ForeignKey), usuario (ForeignKey), el contenido usuario: usuario de autenticación Tengamos p1 Supongamos, dos problemas p2 y U1, U2 son dos usuarios U1 tiene dos envíos s1, s2 para p1 y uno (s3) para p2 y u2 tienen uno para p1 (s4), dos para p2 (s5, s6) Así que quiero un resultado de conjunto de preguntas como este: s2, s3, s4, s6 es decir, descuidar los viejos con el mismo problema de usuario s2, s3, – crodjer