1
0
mirror of https://github.com/django/django.git synced 2024-12-23 01:25:58 +00:00

Refs #18974 -- Deprecated @models.permalink() decorator.

This commit is contained in:
Tim Graham 2016-10-04 14:39:49 -04:00 committed by GitHub
parent aa9569fce1
commit 0083a4c8e9
4 changed files with 55 additions and 14 deletions

View File

@ -1,5 +1,3 @@
from functools import wraps
from django.core.exceptions import ObjectDoesNotExist # NOQA
from django.db.models import signals # NOQA
from django.db.models.aggregates import * # NOQA
@ -37,7 +35,17 @@ def permalink(func):
(viewname, viewargs)
(viewname, viewargs, viewkwargs)
"""
import warnings
from functools import wraps
from django.urls import reverse
from django.utils.deprecation import RemovedInDjango21Warning
warnings.warn(
'permalink() is deprecated in favor of calling django.urls.reverse() '
'in the decorated method.',
RemovedInDjango21Warning
)
@wraps(func)
def inner(*args, **kwargs):

View File

@ -41,6 +41,8 @@ details on these changes.
* The ``authenticate()`` method of authentication backends will require a
``request`` argument.
* The ``django.db.models.permalink()`` decorator will be removed.
.. _deprecation-removed-in-2.0:
2.0

View File

@ -554,6 +554,31 @@ Miscellaneous
Features deprecated in 1.11
===========================
``models.permalink()`` decorator
--------------------------------
Use :func:`django.urls.reverse` instead. For example::
from django.db import models
class MyModel(models.Model):
...
@models.permalink
def url(self):
return ('guitarist_detail', [self.slug])
becomes::
from django.db import models
from django.urls import reverse
class MyModel(models.Model):
...
def url(self):
return reverse('guitarist_detail', args=[self.slug])
Miscellaneous
-------------

View File

@ -1,4 +1,7 @@
import warnings
from django.db import models
from django.utils.deprecation import RemovedInDjango21Warning
def set_attr(name, value):
@ -8,17 +11,20 @@ def set_attr(name, value):
return wrapper
class Guitarist(models.Model):
name = models.CharField(max_length=50)
slug = models.CharField(max_length=50)
with warnings.catch_warnings():
warnings.simplefilter('ignore', category=RemovedInDjango21Warning)
@models.permalink
def url(self):
"Returns the URL for this guitarist."
return ('guitarist_detail', [self.slug])
class Guitarist(models.Model):
name = models.CharField(max_length=50)
slug = models.CharField(max_length=50)
@models.permalink
@set_attr('attribute', 'value')
def url_with_attribute(self):
"Returns the URL for this guitarist and holds an attribute"
return ('guitarist_detail', [self.slug])
@models.permalink
def url(self):
"Returns the URL for this guitarist."
return ('guitarist_detail', [self.slug])
@models.permalink
@set_attr('attribute', 'value')
def url_with_attribute(self):
"Returns the URL for this guitarist and holds an attribute"
return ('guitarist_detail', [self.slug])