Incorrect docs on Updating multiple objects at once using related records
|Reported by:||Derek Willis||Owned by:||Derek Willis|
|Cc:||Triage Stage:||Ready for checkin|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
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:
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.
Change History (8)
comment:1 Changed 7 years ago by
|Patch needs improvement:||unset|
|Status:||new → assigned|