Frage

Da ein Objekt wie:

class M(models.Model):
  test = models.BooleanField()
  created_date = models.DateTimeField(auto_now_add=True)

Da Beispieldaten (unter der Annahme monoton steigende automatische created_date):

M(test=False).save()

M(test=True).save()

M(test=False).save()

X = M(test=True).save()

M(test=False).save()

Y = M(test=False).save()

M(test=False).save()

M(test=True).save()

Kann man die Django ORM verwenden, um eine Abfrage zu erstellen, die X zurückkehren würde (die vorherige Abfrage, nach Datum, wo ‚test‘ = True), wenn Sie Y gegeben sind? Wenn ja, wie?

Mit anderen Worten: Da Y, wie man das jüngste vorherige Element ist, wo ‚test‘ True ist

Gedanken & Feedback ist willkommen, danke!

War es hilfreich?

Lösung

Versuchen Sie, diese

M.objects.filter(created_date__lte=Y.created_date).filter(test=True)[0:1]

Sie können auch eine order_by Klausel wie

hinzufügen
M.objects.filter(created_date__lte=Y.created_date)\
         .filter(test=True)\
         .order_by('-created_date')[0:1]

Das sollte funktionieren.

Andere Tipps

Mit Hilfe von Django Feld Lookups , Sie können etwas zum Effekt von der Lage sein, zu erreichen, was Sie mit dem folgenden Ausdruck werden sollen:

M.objects.filter( test=True, created_date__lt=Y.created_date ).order_by( '-created_date' )

Je nachdem, ob es oder nicht alle Elemente in dem resultierenden queryset Objekt, können Sie die ersten ein abholen kann, die das jüngste Objekt sein wird, die Sie wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top