Question

Étant donné un objet tel que:

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

Exemple de données (supposons que la valeur automatique de created_date augmente de manière monotone):

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()

Peut-on utiliser l'ORM de Django pour créer une requête qui renverrait X (la requête précédente, par date, où 'test' = True), si on vous donne Y? Si oui, comment?

En d'autres termes: étant donné Y, comment obtient-on l'élément précédent le plus récent où 'test' est vrai?

Pensées & amp; les commentaires sont appréciés, merci!

Était-ce utile?

La solution

Essayez ceci

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

Vous pouvez également ajouter une clause order_by telle que

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

Cela devrait fonctionner.

Autres conseils

Avec l'aide de recherches de champ Django , vous pourrez peut-être obtenir quelque chose qui donne l'effet de ce que vous voulez avec l'expression suivante:

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

Selon qu'il existe ou non des éléments dans l'objet queryset résultant, vous pouvez choisir le tout premier qui sera l'objet le plus récent que vous souhaitez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top