Use of Subquery on django's update

810 views Asked by At

I'm currently getting this error

Joined field references are not permitted in this query

Any idea why it happens if I do this? (models recreated into a simpler version)

class Foo(models.Model):
    bar = models.ForeignKey(
       Bar, related_name='foos', on_delete=models.CASCADE)
    baz = models.ForeignKey(
       Baz, related_name='foos', null=True, blank=True,
       on_delete=models.SET_NULL)

class Bar(models.Model):
    name = models.CharField(max_length=255)

class Baz(models.Model):
    name = models.CharField(max_length=255)

I wanted to update the baz field of all Foo instances based on all Baz with the same name of Foo's bar

Foo.objects.update(
    baz=Subquery(
        Baz.objects.filter(
            name=OuterRef('bar__name')
        ).values('pk')[:1]
    )
)
1

There are 1 answers

0
Brandon On BEST ANSWER

I made it work by accessing it through Bar's model and chaining OuterRef

Foo.objects.update(
    baz=Subquery(
        Baz.objects.filter(
            name=Subquery(
                Bar.objects.filter(
                    pk=OuterRef(OuterRef('bar_id'))
                ).values('name')[:1]
            )
        ).values('pk')[:1]
    )
)