mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #30421 -- Allowed symmetrical intermediate table for self-referential ManyToManyField.
This commit is contained in:
committed by
Mariusz Felisiak
parent
a9179ab032
commit
87b1ad6e73
@@ -1234,18 +1234,6 @@ class ManyToManyField(RelatedField):
|
||||
to_model_name = to_model._meta.object_name
|
||||
relationship_model_name = self.remote_field.through._meta.object_name
|
||||
self_referential = from_model == to_model
|
||||
|
||||
# Check symmetrical attribute.
|
||||
if (self_referential and self.remote_field.symmetrical and
|
||||
not self.remote_field.through._meta.auto_created):
|
||||
errors.append(
|
||||
checks.Error(
|
||||
'Many-to-many fields with intermediate tables must not be symmetrical.',
|
||||
obj=self,
|
||||
id='fields.E332',
|
||||
)
|
||||
)
|
||||
|
||||
# Count foreign keys in intermediate model
|
||||
if self_referential:
|
||||
seen_self = sum(
|
||||
|
||||
@@ -938,11 +938,14 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
|
||||
through_defaults=through_defaults,
|
||||
)
|
||||
# If this is a symmetrical m2m relation to self, add the mirror
|
||||
# entry in the m2m table. `through_defaults` aren't used here
|
||||
# because of the system check error fields.E332: Many-to-many
|
||||
# fields with intermediate tables must not be symmetrical.
|
||||
# entry in the m2m table.
|
||||
if self.symmetrical:
|
||||
self._add_items(self.target_field_name, self.source_field_name, *objs)
|
||||
self._add_items(
|
||||
self.target_field_name,
|
||||
self.source_field_name,
|
||||
*objs,
|
||||
through_defaults=through_defaults,
|
||||
)
|
||||
add.alters_data = True
|
||||
|
||||
def remove(self, *objs):
|
||||
|
||||
Reference in New Issue
Block a user