OuterRef not being treated as an F Expression

460 views
Skip to first unread message

Michael Barr

unread,
Feb 9, 2018, 7:52:50 AM2/9/18
to Django users
According to the documentation on models.OuterRef:

It acts like an F expression except that the check to see if it refers to a valid field isn’t made until the outer queryset is resolved.

I am experiencing an issue with this using the following example:

class ExampleModel(models.Model):
date = models.DateField()
value = models.IntegerField()


subquery = ExampleModel.objects.filter(
date__gte=models.OuterRef('date') - timedelta(days=2),
date__lte=models.OuterRef('date') + timedelta(days=2),
value__lte=5
)
queryset = ExampleModel.objects.annotate(
value_is_less_than_five=models.Exists(subquery)
)
 
The result that I am getting is:

AttributeError: 'ResolvedOuterRef' object has no attribute 'relabeled_clone'

From my understanding, if this is similar to an F Expression, you should be able to perform the timedelta on the OuterRef. I also found someone else on StackOverflow with the same issue. 

What I would like to know is if this is a bug (e.g. should it be supported), or a documentation issue. 

Thanks in advance for your assistance!

Michael Barr

unread,
Mar 1, 2018, 7:55:24 AM3/1/18
to Django users
For what it is worth, it has been confirmed as a bug and fixed: https://code.djangoproject.com/ticket/29142
Reply all
Reply to author
Forward
0 new messages