mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Refs #21127 -- Required on_delete for ForeignKey/OneToOneField.
Per deprecation timeline.
This commit is contained in:
@@ -1,17 +1,12 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import warnings
|
||||
|
||||
from django.core.checks import Error, Warning as DjangoWarning
|
||||
from django.db import models
|
||||
from django.db.models.fields.related import ForeignObject
|
||||
from django.test import ignore_warnings
|
||||
from django.test.testcases import SimpleTestCase, skipIfDBFeature
|
||||
from django.test.utils import isolate_apps, override_settings
|
||||
from django.utils import six
|
||||
from django.utils.deprecation import RemovedInDjango20Warning
|
||||
from django.utils.version import get_docs_version
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
@@ -29,88 +24,6 @@ class RelativeFieldTests(SimpleTestCase):
|
||||
errors = field.check()
|
||||
self.assertEqual(errors, [])
|
||||
|
||||
@ignore_warnings(category=RemovedInDjango20Warning)
|
||||
def test_valid_foreign_key_without_on_delete(self):
|
||||
class Target(models.Model):
|
||||
model = models.IntegerField()
|
||||
|
||||
class Model(models.Model):
|
||||
field = models.ForeignKey(Target, related_name='+')
|
||||
|
||||
def test_foreign_key_without_on_delete_warning(self):
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always') # prevent warnings from appearing as errors
|
||||
|
||||
class Target(models.Model):
|
||||
model = models.IntegerField()
|
||||
|
||||
class Model(models.Model):
|
||||
field = models.ForeignKey(Target, related_name='+')
|
||||
|
||||
self.assertEqual(len(warns), 1)
|
||||
self.assertEqual(
|
||||
str(warns[0].message),
|
||||
'on_delete will be a required arg for ForeignKey in Django '
|
||||
'2.0. Set it to models.CASCADE on models and in existing '
|
||||
'migrations if you want to maintain the current default '
|
||||
'behavior. See https://docs.djangoproject.com/en/%s/ref/models/fields/'
|
||||
'#django.db.models.ForeignKey.on_delete' % get_docs_version(),
|
||||
)
|
||||
|
||||
def test_foreign_key_to_field_as_arg(self):
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always') # prevent warnings from appearing as errors
|
||||
|
||||
class Target(models.Model):
|
||||
model = models.IntegerField()
|
||||
|
||||
class Model(models.Model):
|
||||
field = models.ForeignKey(Target, 'id')
|
||||
|
||||
self.assertEqual(len(warns), 1)
|
||||
self.assertEqual(
|
||||
str(warns[0].message),
|
||||
"The signature for ForeignKey will change in Django 2.0. "
|
||||
"Pass to_field='id' as a kwarg instead of as an arg."
|
||||
)
|
||||
|
||||
def test_one_to_one_field_without_on_delete_warning(self):
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always') # prevent warnings from appearing as errors
|
||||
|
||||
class Target(models.Model):
|
||||
model = models.IntegerField()
|
||||
|
||||
class Model(models.Model):
|
||||
field = models.OneToOneField(Target, related_name='+')
|
||||
|
||||
self.assertEqual(len(warns), 1)
|
||||
self.assertEqual(
|
||||
str(warns[0].message),
|
||||
'on_delete will be a required arg for OneToOneField in Django '
|
||||
'2.0. Set it to models.CASCADE on models and in existing '
|
||||
'migrations if you want to maintain the current default '
|
||||
'behavior. See https://docs.djangoproject.com/en/%s/ref/models/fields/'
|
||||
'#django.db.models.ForeignKey.on_delete' % get_docs_version(),
|
||||
)
|
||||
|
||||
def test_one_to_one_field_to_field_as_arg(self):
|
||||
with warnings.catch_warnings(record=True) as warns:
|
||||
warnings.simplefilter('always') # prevent warnings from appearing as errors
|
||||
|
||||
class Target(models.Model):
|
||||
model = models.IntegerField()
|
||||
|
||||
class Model(models.Model):
|
||||
field = models.OneToOneField(Target, 'id')
|
||||
|
||||
self.assertEqual(len(warns), 1)
|
||||
self.assertEqual(
|
||||
str(warns[0].message),
|
||||
"The signature for OneToOneField will change in Django 2.0. "
|
||||
"Pass to_field='id' as a kwarg instead of as an arg."
|
||||
)
|
||||
|
||||
def test_foreign_key_to_missing_model(self):
|
||||
# Model names are resolved when a model is being created, so we cannot
|
||||
# test relative fields in isolation and we need to attach them to a
|
||||
|
||||
Reference in New Issue
Block a user