The docs for Updating multiple objects at once say that "The only restriction on the QuerySet that is updated is that it can only access one database table, the model's main table. So don't try to filter based on related fields or anything like that; it won't work."
But I've been able to update a QuerySet based on a filter of related records. You just can't update the related records. For example, given the following models:
class CoachingJob(models.Model):
name = models.CharField(max_length=75)
slug = models.SlugField(max_length=75)
class CollegeCoach(models.Model):
coach = models.CharField(max_length=75)
jobs = models.ManyToManyField(CoachingJob)
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
is_head_coach = models.BooleanField(default=False)
I can perform the following update successfully:
CollegeCoach.objects.select_related().filter(jobs__name='Head Coach').update(is_head_coach=True)
If I try to update the CoachingJob model, it properly raises a FieldDoesNotExist error:
CollegeCoach.objects.select_related().filter(jobs__name='Head Coach').update(jobs__name='Top Dog')
FieldDoesNotExist: CollegeCoach has no field named 'name'
The attached patch suggests changing the docs to say that filtering on related records is permitted, but not updating those related records, and provides an example.
tabs -> spaces for existing patch