Spanning multi-valued relationships with 'filter' and 'values'

35 views
Skip to first unread message

Christhian Jesus

unread,
Mar 23, 2019, 11:37:19 PM3/23/19
to Django users
When i try to follow the relationship with 'filter', the lookup is ignored:

Evaluacion.objects.values('id', 'periodo__indicador').filter(periodo__indicador=1)

<QuerySet [{'id': 1, 'periodo__indicador': 1}, {'id': 1, 'periodo__indicador': 2}, {'id': 1, 'periodo__indicador': 3}, {'id': 1, 'periodo__indicador': 4}, {'id': 1, 'periodo__indicador': 5}, {'id': 1, 'periodo__indicador': 6}, {'id': 1, 'periodo__indicador': 7}, {'id': 1, 'periodo__indicador': 8}, {'id': 3, 'periodo__indicador': 1}, {'id': 3, 'periodo__indicador': 2}, {'id': 3, 'periodo__indicador': 3}, {'id': 3, 'periodo__indicador': 4}, {'id': 3, 'periodo__indicador': 5}, {'id': 3, 'periodo__indicador': 6}, {'id': 3, 'periodo__indicador': 7}, {'id': 3, 'periodo__indicador': 8}]>

My Django version is 2.1.7 and Python 3.7.2
My model is:

Class Periodo(models.Model):
   
pass

Class Indicador(models.Model):
    periodo
= models.ForeignKey(Periodo, on_delete=models.CASCADE)

class Evaluacion(models.Model):
    periodo
= models.ForeignKey(Periodo, on_delete=models.CASCADE)



I think this is a bug, because documentation says:

Finally, note that you can call filter(), order_by(), etc. after the values() call, that means that these two calls are identical:

Blog.objects.values().order_by('id')
Blog.objects.order_by('id').values()


I tried to change the order between 'values' and 'filter', and it worked:

Evaluacion.objects.filter(periodo__indicador=1).values('id', 'periodo__indicador')
 
<QuerySet [{'id': 1, 'periodo__indicador': 1}, {'id': 3, 'periodo__indicador': 1}]>





Reply all
Reply to author
Forward
0 new messages