Django ORM: Obter mais recente objeto antes que atende a uma determinada condição

votos
2

Dado um objeto como:

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

dados da amostra dada (assumir monótona crescente created_date automática):

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

pode-se usar o Django ORM para criar uma consulta que voltaria X (a consulta anterior, por data, onde 'teste' = True), se você é dado Y? Se sim, como?

Em outras palavras: Dado Y, como se obter o mais recente elemento anterior, onde 'teste' é verdadeira?

Pensamentos & feedback é apreciada, obrigado!

Publicado 21/01/2009 em 06:58
fonte usuário
Em outras línguas...                            


2 respostas

votos
6

tente este

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

Você também pode adicionar uma cláusula order_by como

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

Isso deve funcionar.

Respondeu 21/01/2009 em 07:12
fonte usuário

votos
3

Com a ajuda de pesquisas de campo Django , você pode ser capaz de conseguir algo no sentido do que você quer com a seguinte expressão:

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

Dependendo se existem ou não existem quaisquer elementos no objeto queryset resultante, você pode pegar o primeiro aquele que será o objeto mais recente que você quer.

Respondeu 21/01/2009 em 07:12
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more