mirror of
https://github.com/django/django.git
synced 2025-08-03 02:23:12 +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
|
@ -3,7 +3,6 @@ import unittest
|
|||
from django.conf import settings
|
||||
from django.core.checks import Error, Warning
|
||||
from django.core.checks.model_checks import _check_lazy_references
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.db import connection, connections, models
|
||||
from django.db.models.functions import Lower
|
||||
from django.db.models.signals import post_init
|
||||
|
@ -1006,14 +1005,24 @@ class OtherModelTests(SimpleTestCase):
|
|||
|
||||
self.assertEqual(ShippingMethod.check(), [])
|
||||
|
||||
def test_missing_parent_link(self):
|
||||
msg = 'Add parent_link=True to invalid_models_tests.ParkingLot.parent.'
|
||||
with self.assertRaisesMessage(ImproperlyConfigured, msg):
|
||||
class Place(models.Model):
|
||||
pass
|
||||
def test_onetoone_with_parent_model(self):
|
||||
class Place(models.Model):
|
||||
pass
|
||||
|
||||
class ParkingLot(Place):
|
||||
parent = models.OneToOneField(Place, models.CASCADE)
|
||||
class ParkingLot(Place):
|
||||
other_place = models.OneToOneField(Place, models.CASCADE, related_name='other_parking')
|
||||
|
||||
self.assertEqual(ParkingLot.check(), [])
|
||||
|
||||
def test_onetoone_with_explicit_parent_link_parent_model(self):
|
||||
class Place(models.Model):
|
||||
pass
|
||||
|
||||
class ParkingLot(Place):
|
||||
place = models.OneToOneField(Place, models.CASCADE, parent_link=True, primary_key=True)
|
||||
other_place = models.OneToOneField(Place, models.CASCADE, related_name='other_parking')
|
||||
|
||||
self.assertEqual(ParkingLot.check(), [])
|
||||
|
||||
def test_m2m_table_name_clash(self):
|
||||
class Foo(models.Model):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue