(self, *objs, bulk=True)
| 843 | return queryset, rel_obj_attr, instance_attr, False, cache_name, False |
| 844 | |
| 845 | def add(self, *objs, bulk=True): |
| 846 | self._check_fk_val() |
| 847 | self._remove_prefetched_objects() |
| 848 | db = router.db_for_write(self.model, instance=self.instance) |
| 849 | |
| 850 | def check_and_update_obj(obj): |
| 851 | if not isinstance(obj, self.model): |
| 852 | raise TypeError( |
| 853 | "'%s' instance expected, got %r" |
| 854 | % ( |
| 855 | self.model._meta.object_name, |
| 856 | obj, |
| 857 | ) |
| 858 | ) |
| 859 | setattr(obj, self.field.name, self.instance) |
| 860 | |
| 861 | if bulk: |
| 862 | pks = [] |
| 863 | for obj in objs: |
| 864 | check_and_update_obj(obj) |
| 865 | if obj._state.adding or obj._state.db != db: |
| 866 | raise ValueError( |
| 867 | "%r instance isn't saved. Use bulk=False or save " |
| 868 | "the object first." % obj |
| 869 | ) |
| 870 | pks.append(obj.pk) |
| 871 | self.model._base_manager.using(db).filter(pk__in=pks).update( |
| 872 | **{ |
| 873 | self.field.name: self.instance, |
| 874 | } |
| 875 | ) |
| 876 | else: |
| 877 | with transaction.atomic(using=db, savepoint=False): |
| 878 | for obj in objs: |
| 879 | check_and_update_obj(obj) |
| 880 | obj.save() |
| 881 | |
| 882 | add.alters_data = True |
| 883 |
no test coverage detected