diff options
| author | Tom Christie | 2014-08-20 17:15:46 +0100 | 
|---|---|---|
| committer | Tom Christie | 2014-08-20 17:15:46 +0100 | 
| commit | 4d8c63abc996bcb44d7a68dd7a7234b0d9f148a0 (patch) | |
| tree | 15d175ba67d1a8ef0f1f651a82120ac9263d7d72 /docs | |
| parent | 9372cc8c31fc5d7b3fb3b155ed88b0b6d3c00049 (diff) | |
| download | django-rest-framework-4d8c63abc996bcb44d7a68dd7a7234b0d9f148a0.tar.bz2 | |
Deprecate .model in related routers/permissions
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/api-guide/permissions.md | 10 | ||||
| -rw-r--r-- | docs/api-guide/routers.md | 4 | 
2 files changed, 10 insertions, 4 deletions
| diff --git a/docs/api-guide/permissions.md b/docs/api-guide/permissions.md index 38ae3d0a..e867a456 100644 --- a/docs/api-guide/permissions.md +++ b/docs/api-guide/permissions.md @@ -114,7 +114,7 @@ This permission is suitable if you want to your API to allow read permissions to  ## DjangoModelPermissions -This permission class ties into Django's standard `django.contrib.auth` [model permissions][contribauth].  When applied to a view that has a `.model` property, authorization will only be granted if the user *is authenticated* and has the *relevant model permissions* assigned. +This permission class ties into Django's standard `django.contrib.auth` [model permissions][contribauth].  This permission must only be applied to views that has a `.queryset` property set. Authorization will only be granted if the user *is authenticated* and has the *relevant model permissions* assigned.  * `POST` requests require the user to have the `add` permission on the model.  * `PUT` and `PATCH` requests require the user to have the `change` permission on the model. @@ -124,6 +124,12 @@ The default behaviour can also be overridden to support custom model permissions  To use custom model permissions, override `DjangoModelPermissions` and set the `.perms_map` property.  Refer to the source code for details. +#### Using with views that do not include a `queryset` attribute. + +If you're using this permission with a view that uses an overridden `get_queryset()` method there may not be a `queryset` attribute on the view. In this case we suggest also marking the view with a sential queryset, so that this class can determine the required permissions. For example: + +    queryset = User.objects.none()  # Required for DjangoModelPermissions +  ## DjangoModelPermissionsOrAnonReadOnly  Similar to `DjangoModelPermissions`, but also allows unauthenticated users to have read-only access to the API. @@ -132,7 +138,7 @@ Similar to `DjangoModelPermissions`, but also allows unauthenticated users to ha  This permission class ties into Django's standard [object permissions framework][objectpermissions] that allows per-object permissions on models.  In order to use this permission class, you'll also need to add a permission backend that supports object-level permissions, such as [django-guardian][guardian]. -When applied to a view that has a `.model` property, authorization will only be granted if the user *is authenticated* and has the *relevant per-object permissions* and *relevant model permissions* assigned. +As with `DjangoModelPermissions`, this permission must only be applied to views that have a `.queryset` property. Authorization will only be granted if the user *is authenticated* and has the *relevant per-object permissions* and *relevant model permissions* assigned.  * `POST` requests require the user to have the `add` permission on the model instance.  * `PUT` and `PATCH` requests require the user to have the `change` permission on the model instance. diff --git a/docs/api-guide/routers.md b/docs/api-guide/routers.md index 2d760ca4..61a476b8 100644 --- a/docs/api-guide/routers.md +++ b/docs/api-guide/routers.md @@ -41,9 +41,9 @@ The example above would generate the following URL patterns:  **Note**: The `base_name` argument is used to specify the initial part of the view name pattern.  In the example above, that's the `user` or `account` part. -Typically you won't *need* to specify the `base-name` argument, but if you have a viewset where you've defined a custom `get_queryset` method, then the viewset may not have any `.model` or `.queryset` attribute set.  If you try to register that viewset you'll see an error like this: +Typically you won't *need* to specify the `base-name` argument, but if you have a viewset where you've defined a custom `get_queryset` method, then the viewset may not have a `.queryset` attribute set.  If you try to register that viewset you'll see an error like this: -    'base_name' argument not specified, and could not automatically determine the name from the viewset, as it does not have a '.model' or '.queryset' attribute. +    'base_name' argument not specified, and could not automatically determine the name from the viewset, as it does not have a '.queryset' attribute.  This means you'll need to explicitly set the `base_name` argument when registering the viewset, as it could not be automatically determined from the model name. | 
