Update 2:
(Dopo aver letto i commenti di OP) Suggerisco l'aggiunta di un nuovo modello per tenere traccia l'ultimo di presentazione. Chiamalo LatestSubmission
.
class LatestSubmission(models.Model):
user = models.ForeignKey(User)
problem = models.ForeignKey(Problem)
submission = models.ForeignKey(Submission)
È quindi possibile
- esclusione
Submission.save()
per creare/aggiornare la voce in LatestSubmission
ogni volta che un utente inserisce una nuova soluzione per un problema
- allegare una funzione che fa la stessa cosa a un adatto signal.
tale che LatestSubmission
conterrà una riga per ogni combinazione problema-user-presentazione indicando l'ultimo di presentazione per il problema da ogni utente. Una volta che avete questo sul posto si può sparare una singola query:
LatestSubmission.objects.all().order_by('problem')
Aggiornamento:
Dal momento che l'OP ha pubblicato il codice di esempio, la soluzione può essere modificato come segue:
for user in User.objects.all(): # Get all users
user.submission_set.latest('time') # Pick the latest submission based on time.
risposta originale
In assenza di qualsiasi data/ora basato i criteri per decidere quale è "più vecchio" o "più recente", è possibile utilizzare la chiave primaria (id
) di Submission
per "trascurare quelli vecchi".
for user in User.objects.all(): # Get all users
user.submission_set.latest('id') # Pick the latest submission by each user.
fonte
2010-08-14 13:40:37
Cosa intendi per "campo che ha un utente e un problema"? Stai parlando di modelli Django? Pubblica il codice pertinente. –
I modelli sono come questo: Problema: titolo, in discussione Submission: problema (ForeignKey), utente (ForeignKey), contenuti Utente: Aut utente Diamo p1 Supponiamo, p2 due problemi e U1, U2 sono due utenti U1 ha due sottomissioni s1, s2 per p1 e uno (s3) per p2 e u2 ne hanno uno per p1 (s4), due per p2 (s5, s6) Quindi voglio un risultato queryset come questo: s2, s3, s4, s6 ie trascurano i vecchi con lo stesso problema utente s2, s3, – crodjer