mirror of
https://github.com/django/django.git
synced 2025-08-02 18:13:02 +00:00
Fixed #29998 -- Allowed multiple OneToOneFields to the parent model.
We assumed that any OneToOneField's in a child model must be the parent link and raised an error when parent_link=True was not specified. This patch allows to specify multiple OneToOneField's to the parent model. OneToOneField's without a custom related_name will raise fields.E304 and fields.E305 so this should warn users when they try to override the auto-created OneToOneField.
This commit is contained in:
parent
7400da49a5
commit
bf77669453
5 changed files with 47 additions and 14 deletions
|
@ -1291,6 +1291,33 @@ class ComplexClashTests(SimpleTestCase):
|
|||
),
|
||||
])
|
||||
|
||||
def test_clash_parent_link(self):
|
||||
class Parent(models.Model):
|
||||
pass
|
||||
|
||||
class Child(Parent):
|
||||
other_parent = models.OneToOneField(Parent, models.CASCADE)
|
||||
|
||||
errors = [
|
||||
('fields.E304', 'accessor', 'parent_ptr', 'other_parent'),
|
||||
('fields.E305', 'query name', 'parent_ptr', 'other_parent'),
|
||||
('fields.E304', 'accessor', 'other_parent', 'parent_ptr'),
|
||||
('fields.E305', 'query name', 'other_parent', 'parent_ptr'),
|
||||
]
|
||||
self.assertEqual(Child.check(), [
|
||||
Error(
|
||||
"Reverse %s for 'Child.%s' clashes with reverse %s for "
|
||||
"'Child.%s'." % (attr, field_name, attr, clash_name),
|
||||
hint=(
|
||||
"Add or change a related_name argument to the definition "
|
||||
"for 'Child.%s' or 'Child.%s'." % (field_name, clash_name)
|
||||
),
|
||||
obj=Child._meta.get_field(field_name),
|
||||
id=error_id,
|
||||
)
|
||||
for error_id, attr, field_name, clash_name in errors
|
||||
])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
class M2mThroughFieldsTests(SimpleTestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue