mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #25550 -- Deprecated direct assignment to the reverse side of a related set.
This commit is contained in:
@@ -201,7 +201,7 @@ class DeserializedObject(object):
|
||||
models.Model.save_base(self.object, using=using, raw=True, **kwargs)
|
||||
if self.m2m_data and save_m2m:
|
||||
for accessor_name, object_list in self.m2m_data.items():
|
||||
setattr(self.object, accessor_name, object_list)
|
||||
getattr(self.object, accessor_name).set(object_list)
|
||||
|
||||
# prevent a second (possibly accidental) call to save() from saving
|
||||
# the m2m data twice.
|
||||
|
||||
@@ -1600,7 +1600,7 @@ class ManyToManyField(RelatedField):
|
||||
return getattr(obj, self.attname).all()
|
||||
|
||||
def save_form_data(self, instance, data):
|
||||
setattr(instance, self.attname, data)
|
||||
getattr(instance, self.attname).set(data)
|
||||
|
||||
def formfield(self, **kwargs):
|
||||
db = kwargs.pop('using', None)
|
||||
|
||||
@@ -62,11 +62,13 @@ and two directions (forward and reverse) for a total of six combinations.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import warnings
|
||||
from operator import attrgetter
|
||||
|
||||
from django.db import connections, router, transaction
|
||||
from django.db.models import Q, signals
|
||||
from django.db.models.query import QuerySet
|
||||
from django.utils.deprecation import RemovedInDjango20Warning
|
||||
from django.utils.functional import cached_property
|
||||
|
||||
|
||||
@@ -477,6 +479,11 @@ class ReverseManyToOneDescriptor(object):
|
||||
- ``instance`` is the ``parent`` instance
|
||||
- ``value`` in the ``children`` sequence on the right of the equal sign
|
||||
"""
|
||||
warnings.warn(
|
||||
'Direct assignment to the reverse side of a related set is '
|
||||
'deprecated due to the implicit save() that happens. Use %s.set() '
|
||||
'instead.' % self.rel.get_accessor_name(), RemovedInDjango20Warning, stacklevel=2,
|
||||
)
|
||||
manager = self.__get__(instance)
|
||||
manager.set(value)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user