Commit 8ea7d6b5 by Xavier Ordoquy

Merge remote-tracking branch 'origin/master' into markdown-compat

Conflicts:
	requirements/requirements-optionals.txt
parents f308900a 50749c47
...@@ -2,5 +2,6 @@ ...@@ -2,5 +2,6 @@
skip=.tox skip=.tox
atomic=true atomic=true
multi_line_output=5 multi_line_output=5
known_standard_library=types
known_third_party=pytest,django known_third_party=pytest,django
known_first_party=rest_framework known_first_party=rest_framework
[main] [main]
host = https://www.transifex.com host = https://www.transifex.com
lang_map = sr@latin:sr_Latn, zh-Hans:zh_Hans, zh-Hant:zh_Hant
[django-rest-framework.djangopo] [django-rest-framework.djangopo]
file_filter = rest_framework/locale/<lang>/LC_MESSAGES/django.po file_filter = rest_framework/locale/<lang>/LC_MESSAGES/django.po
......
# License # License
Copyright (c) 2011-2015, Tom Christie Copyright (c) 2011-2016, Tom Christie
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
......
...@@ -165,6 +165,8 @@ The `curl` command line tool may be useful for testing token authenticated APIs. ...@@ -165,6 +165,8 @@ The `curl` command line tool may be useful for testing token authenticated APIs.
#### Generating Tokens #### Generating Tokens
##### By using signals
If you want every user to have an automatically generated Token, you can simply catch the User's `post_save` signal. If you want every user to have an automatically generated Token, you can simply catch the User's `post_save` signal.
from django.conf import settings from django.conf import settings
...@@ -187,6 +189,8 @@ If you've already created some users, you can generate tokens for all existing u ...@@ -187,6 +189,8 @@ If you've already created some users, you can generate tokens for all existing u
for user in User.objects.all(): for user in User.objects.all():
Token.objects.get_or_create(user=user) Token.objects.get_or_create(user=user)
##### By exposing an api endpoint
When using `TokenAuthentication`, you may want to provide a mechanism for clients to obtain a token given the username and password. REST framework provides a built-in view to provide this behavior. To use it, add the `obtain_auth_token` view to your URLconf: When using `TokenAuthentication`, you may want to provide a mechanism for clients to obtain a token given the username and password. REST framework provides a built-in view to provide this behavior. To use it, add the `obtain_auth_token` view to your URLconf:
from rest_framework.authtoken import views from rest_framework.authtoken import views
...@@ -202,6 +206,17 @@ The `obtain_auth_token` view will return a JSON response when valid `username` a ...@@ -202,6 +206,17 @@ The `obtain_auth_token` view will return a JSON response when valid `username` a
Note that the default `obtain_auth_token` view explicitly uses JSON requests and responses, rather than using default renderer and parser classes in your settings. If you need a customized version of the `obtain_auth_token` view, you can do so by overriding the `ObtainAuthToken` view class, and using that in your url conf instead. Note that the default `obtain_auth_token` view explicitly uses JSON requests and responses, rather than using default renderer and parser classes in your settings. If you need a customized version of the `obtain_auth_token` view, you can do so by overriding the `ObtainAuthToken` view class, and using that in your url conf instead.
##### With Django admin
It is also possible to create Tokens manually through admin interface. In case you are using a large user base, we recommend that you monkey patch the `TokenAdmin` class to customize it to your needs, more specifically by declaring the `user` field as `raw_field`.
`your_app/admin.py`:
from rest_framework.authtoken.admin import TokenAdmin
TokenAdmin.raw_id_fields = ('user',)
#### Schema migrations #### Schema migrations
The `rest_framework.authtoken` app includes both Django native migrations (for Django versions >1.7) and South migrations (for Django versions <1.7) that will create the authtoken table. The `rest_framework.authtoken` app includes both Django native migrations (for Django versions >1.7) and South migrations (for Django versions <1.7) that will create the authtoken table.
......
...@@ -145,11 +145,11 @@ To use REST framework's `DjangoFilterBackend`, first install `django-filter`. ...@@ -145,11 +145,11 @@ To use REST framework's `DjangoFilterBackend`, first install `django-filter`.
pip install django-filter pip install django-filter
If you are using the browsable API or admin API you may also want to install `crispy-forms`, which will enhance the presentation of the filter forms in HTML views, by allowing them to render Bootstrap 3 HTML. If you are using the browsable API or admin API you may also want to install `django-crispy-forms`, which will enhance the presentation of the filter forms in HTML views, by allowing them to render Bootstrap 3 HTML.
pip install django-crispy-forms pip install django-crispy-forms
With crispy forms installed, the browsable API will present a filtering control for `DjangoFilterBackend`, like so: With crispy forms installed and added to Django's `INSTALLED_APPS`, the browsable API will present a filtering control for `DjangoFilterBackend`, like so:
![Django Filter](../img/django-filter.png) ![Django Filter](../img/django-filter.png)
...@@ -177,7 +177,7 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha ...@@ -177,7 +177,7 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha
from rest_framework import filters from rest_framework import filters
from rest_framework import generics from rest_framework import generics
class ProductFilter(django_filters.FilterSet): class ProductFilter(filters.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_type='gte') min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
max_price = django_filters.NumberFilter(name="price", lookup_type='lte') max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta: class Meta:
...@@ -199,12 +199,12 @@ You can also span relationships using `django-filter`, let's assume that each ...@@ -199,12 +199,12 @@ You can also span relationships using `django-filter`, let's assume that each
product has foreign key to `Manufacturer` model, so we create filter that product has foreign key to `Manufacturer` model, so we create filter that
filters using `Manufacturer` name. For example: filters using `Manufacturer` name. For example:
import django_filters
from myapp.models import Product from myapp.models import Product
from myapp.serializers import ProductSerializer from myapp.serializers import ProductSerializer
from rest_framework import filters
from rest_framework import generics from rest_framework import generics
class ProductFilter(django_filters.FilterSet): class ProductFilter(filters.FilterSet):
class Meta: class Meta:
model = Product model = Product
fields = ['category', 'in_stock', 'manufacturer__name'] fields = ['category', 'in_stock', 'manufacturer__name']
...@@ -218,9 +218,10 @@ This is nice, but it exposes the Django's double underscore convention as part o ...@@ -218,9 +218,10 @@ This is nice, but it exposes the Django's double underscore convention as part o
import django_filters import django_filters
from myapp.models import Product from myapp.models import Product
from myapp.serializers import ProductSerializer from myapp.serializers import ProductSerializer
from rest_framework import filters
from rest_framework import generics from rest_framework import generics
class ProductFilter(django_filters.FilterSet): class ProductFilter(filters.FilterSet):
manufacturer = django_filters.CharFilter(name="manufacturer__name") manufacturer = django_filters.CharFilter(name="manufacturer__name")
class Meta: class Meta:
......
...@@ -35,14 +35,6 @@ For more complex cases you might also want to override various methods on the vi ...@@ -35,14 +35,6 @@ For more complex cases you might also want to override various methods on the vi
serializer_class = UserSerializer serializer_class = UserSerializer
permission_classes = (IsAdminUser,) permission_classes = (IsAdminUser,)
def get_paginate_by(self):
"""
Use smaller pagination for HTML representations.
"""
if self.request.accepted_renderer.format == 'html':
return 20
return 100
def list(self, request): def list(self, request):
# Note the use of `get_queryset()` instead of `self.queryset` # Note the use of `get_queryset()` instead of `self.queryset`
queryset = self.get_queryset() queryset = self.get_queryset()
...@@ -125,22 +117,22 @@ For example: ...@@ -125,22 +117,22 @@ For example:
Note that if your API doesn't include any object level permissions, you may optionally exclude the `self.check_object_permissions`, and simply return the object from the `get_object_or_404` lookup. Note that if your API doesn't include any object level permissions, you may optionally exclude the `self.check_object_permissions`, and simply return the object from the `get_object_or_404` lookup.
#### `filter_queryset(self, queryset)` #### `filter_queryset(self, queryset)`
Given a queryset, filter it with whichever filter backends are in use, returning a new queryset. Given a queryset, filter it with whichever filter backends are in use, returning a new queryset.
For example: For example:
def filter_queryset(self, queryset): def filter_queryset(self, queryset):
filter_backends = (CategoryFilter,) filter_backends = (CategoryFilter,)
if 'geo_route' in self.request.query_params: if 'geo_route' in self.request.query_params:
filter_backends = (GeoRouteFilter, CategoryFilter) filter_backends = (GeoRouteFilter, CategoryFilter)
elif 'geo_point' in self.request.query_params: elif 'geo_point' in self.request.query_params:
filter_backends = (GeoPointFilter, CategoryFilter) filter_backends = (GeoPointFilter, CategoryFilter)
for backend in list(filter_backends): for backend in list(filter_backends):
queryset = backend().filter_queryset(self.request, queryset, view=self) queryset = backend().filter_queryset(self.request, queryset, view=self)
return queryset return queryset
#### `get_serializer_class(self)` #### `get_serializer_class(self)`
...@@ -156,19 +148,6 @@ For example: ...@@ -156,19 +148,6 @@ For example:
return FullAccountSerializer return FullAccountSerializer
return BasicAccountSerializer return BasicAccountSerializer
#### `get_paginate_by(self)`
Returns the page size to use with pagination. By default this uses the `paginate_by` attribute, and may be overridden by the client if the `paginate_by_param` attribute is set.
You may want to override this method to provide more complex behavior, such as modifying page sizes based on the media type of the response.
For example:
def get_paginate_by(self):
if self.request.accepted_renderer.format == 'html':
return 20
return 100
**Save and deletion hooks**: **Save and deletion hooks**:
The following methods are provided by the mixin classes, and provide easy overriding of the object save or deletion behavior. The following methods are provided by the mixin classes, and provide easy overriding of the object save or deletion behavior.
...@@ -416,5 +395,3 @@ The [django-rest-framework-bulk package][django-rest-framework-bulk] implements ...@@ -416,5 +395,3 @@ The [django-rest-framework-bulk package][django-rest-framework-bulk] implements
[DestroyModelMixin]: #destroymodelmixin [DestroyModelMixin]: #destroymodelmixin
[django-rest-framework-bulk]: https://github.com/miki725/django-rest-framework-bulk [django-rest-framework-bulk]: https://github.com/miki725/django-rest-framework-bulk
[django-rest-multiple-models]: https://github.com/Axiologue/DjangoRestMultipleModels [django-rest-multiple-models]: https://github.com/Axiologue/DjangoRestMultipleModels
...@@ -17,6 +17,8 @@ The built-in styles currently all use links included as part of the content of t ...@@ -17,6 +17,8 @@ The built-in styles currently all use links included as part of the content of t
Pagination is only performed automatically if you're using the generic views or viewsets. If you're using a regular `APIView`, you'll need to call into the pagination API yourself to ensure you return a paginated response. See the source code for the `mixins.ListModelMixin` and `generics.GenericAPIView` classes for an example. Pagination is only performed automatically if you're using the generic views or viewsets. If you're using a regular `APIView`, you'll need to call into the pagination API yourself to ensure you return a paginated response. See the source code for the `mixins.ListModelMixin` and `generics.GenericAPIView` classes for an example.
Pagination can be turned off by setting the pagination class to `None`.
## Setting the pagination style ## Setting the pagination style
The default pagination style may be set globally, using the `DEFAULT_PAGINATION_CLASS` settings key. For example, to use the built-in limit/offset pagination, you would do: The default pagination style may be set globally, using the `DEFAULT_PAGINATION_CLASS` settings key. For example, to use the built-in limit/offset pagination, you would do:
...@@ -95,6 +97,7 @@ The `PageNumberPagination` class includes a number of attributes that may be ove ...@@ -95,6 +97,7 @@ The `PageNumberPagination` class includes a number of attributes that may be ove
To set these attributes you should override the `PageNumberPagination` class, and then enable your custom pagination class as above. To set these attributes you should override the `PageNumberPagination` class, and then enable your custom pagination class as above.
* `django_paginator_class` - The Django Paginator class to use. Default is `django.core.paginator.Paginator`, which should be fine for most use cases.
* `page_size` - A numeric value indicating the page size. If set, this overrides the `PAGE_SIZE` setting. Defaults to the same value as the `PAGE_SIZE` settings key. * `page_size` - A numeric value indicating the page size. If set, this overrides the `PAGE_SIZE` setting. Defaults to the same value as the `PAGE_SIZE` settings key.
* `page_query_param` - A string value indicating the name of the query parameter to use for the pagination control. * `page_query_param` - A string value indicating the name of the query parameter to use for the pagination control.
* `page_size_query_param` - If set, this is a string value indicating the name of a query parameter that allows the client to set the page size on a per-request basis. Defaults to `None`, indicating that the client may not control the requested page size. * `page_size_query_param` - If set, this is a string value indicating the name of a query parameter that allows the client to set the page size on a per-request basis. Defaults to `None`, indicating that the client may not control the requested page size.
...@@ -175,7 +178,7 @@ Proper usage of cursor pagination should have an ordering field that satisfies t ...@@ -175,7 +178,7 @@ Proper usage of cursor pagination should have an ordering field that satisfies t
* Should be a non-nullable value that can be coerced to a string. * Should be a non-nullable value that can be coerced to a string.
* The field should have a database index. * The field should have a database index.
Using an ordering field that does not satisfy these constraints will generally still work, but you'll be loosing some of the benefits of cursor pagination. Using an ordering field that does not satisfy these constraints will generally still work, but you'll be losing some of the benefits of cursor pagination.
For more technical details on the implementation we use for cursor pagination, the ["Building cursors for the Disqus API"][disqus-cursor-api] blog post gives a good overview of the basic approach. For more technical details on the implementation we use for cursor pagination, the ["Building cursors for the Disqus API"][disqus-cursor-api] blog post gives a good overview of the basic approach.
......
...@@ -51,6 +51,9 @@ using the `APIView` class based views. ...@@ -51,6 +51,9 @@ using the `APIView` class based views.
return Response({'received data': request.data}) return Response({'received data': request.data})
Or, if you're using the `@api_view` decorator with function based views. Or, if you're using the `@api_view` decorator with function based views.
from rest_framework.decorators import api_view
from rest_framework.decorators import parser_classes
@api_view(['POST']) @api_view(['POST'])
@parser_classes((JSONParser,)) @parser_classes((JSONParser,))
......
...@@ -100,6 +100,8 @@ Or, if you're using the `@api_view` decorator with function based views. ...@@ -100,6 +100,8 @@ Or, if you're using the `@api_view` decorator with function based views.
} }
return Response(content) return Response(content)
__Note:__ when you set new permission classes through class attribute or decorators you're telling the view to ignore the default list set over the __settings.py__ file.
--- ---
# API Reference # API Reference
......
...@@ -459,7 +459,7 @@ In cases where the cutoff is being enforced you may want to instead use a plain ...@@ -459,7 +459,7 @@ In cases where the cutoff is being enforced you may want to instead use a plain
assigned_to = serializers.SlugRelatedField( assigned_to = serializers.SlugRelatedField(
queryset=User.objects.all(), queryset=User.objects.all(),
slug field='username', slug_field='username',
style={'base_template': 'input.html'} style={'base_template': 'input.html'}
) )
......
...@@ -187,6 +187,15 @@ This renderer is suitable for CRUD-style web APIs that should also present a use ...@@ -187,6 +187,15 @@ This renderer is suitable for CRUD-style web APIs that should also present a use
Note that views that have nested or list serializers for their input won't work well with the `AdminRenderer`, as the HTML forms are unable to properly support them. Note that views that have nested or list serializers for their input won't work well with the `AdminRenderer`, as the HTML forms are unable to properly support them.
**Note**: The `AdminRenderer` is only able to include links to detail pages when a properly configured `URL_FIELD_NAME` (`url` by default) attribute is present in the data. For `HyperlinkedModelSerializer` this will be the case, but for `ModelSerializer` or plain `Serializer` classes you'll need to make sure to include the field explicitly. For example here we use models `get_absolute_url` method:
class AccountSerializer(serializers.ModelSerializer):
url = serializers.CharField(source='get_absolute_url', read_only=True)
class Meta:
model = Account
**.media_type**: `text/html` **.media_type**: `text/html`
**.format**: `'.admin'` **.format**: `'.admin'`
......
...@@ -774,6 +774,8 @@ To support multiple updates you'll need to do so explicitly. When writing your m ...@@ -774,6 +774,8 @@ To support multiple updates you'll need to do so explicitly. When writing your m
* How should insertions be handled? Are they invalid, or do they create new objects? * How should insertions be handled? Are they invalid, or do they create new objects?
* How should removals be handled? Do they imply object deletion, or removing a relationship? Should they be silently ignored, or are they invalid? * How should removals be handled? Do they imply object deletion, or removing a relationship? Should they be silently ignored, or are they invalid?
* How should ordering be handled? Does changing the position of two items imply any state change or is it ignored? * How should ordering be handled? Does changing the position of two items imply any state change or is it ignored?
You will need to add an explicit `id` field to the instance serializer. The default implicitly-generated `id` field is marked as `read_only`. This causes it to be removed on updates. Once you declare it explicitly, it will be available in the list serializer's `update` method.
Here's an example of how you might choose to implement multiple updates: Here's an example of how you might choose to implement multiple updates:
...@@ -800,7 +802,13 @@ Here's an example of how you might choose to implement multiple updates: ...@@ -800,7 +802,13 @@ Here's an example of how you might choose to implement multiple updates:
return ret return ret
class BookSerializer(serializers.Serializer): class BookSerializer(serializers.Serializer):
# We need to identify elements in the list using their primary key,
# so use a writable field here, rather than the default which would be read-only.
id = serializers.IntegerField()
... ...
id = serializers.IntegerField(required=False)
class Meta: class Meta:
list_serializer_class = BookListSerializer list_serializer_class = BookListSerializer
......
...@@ -89,6 +89,7 @@ The 4xx class of status code is intended for cases in which the client seems to ...@@ -89,6 +89,7 @@ The 4xx class of status code is intended for cases in which the client seems to
HTTP_428_PRECONDITION_REQUIRED HTTP_428_PRECONDITION_REQUIRED
HTTP_429_TOO_MANY_REQUESTS HTTP_429_TOO_MANY_REQUESTS
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS
## Server Error - 5xx ## Server Error - 5xx
......
...@@ -130,12 +130,12 @@ Your URL conf must include a pattern that matches the version with a `'version'` ...@@ -130,12 +130,12 @@ Your URL conf must include a pattern that matches the version with a `'version'`
urlpatterns = [ urlpatterns = [
url( url(
r'^(?P<version>[v1|v2]+)/bookings/$', r'^(?P<version>(v1|v2))/bookings/$',
bookings_list, bookings_list,
name='bookings-list' name='bookings-list'
), ),
url( url(
r'^(?P<version>[v1|v2]+)/bookings/(?P<pk>[0-9]+)/$', r'^(?P<version>(v1|v2))/bookings/(?P<pk>[0-9]+)/$',
bookings_detail, bookings_detail,
name='bookings-detail' name='bookings-detail'
) )
......
...@@ -86,7 +86,7 @@ If you're intending to use the browsable API you'll probably also want to add RE ...@@ -86,7 +86,7 @@ If you're intending to use the browsable API you'll probably also want to add RE
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
] ]
Note that the URL path can be whatever you want, but you must include `'rest_framework.urls'` with the `'rest_framework'` namespace. Note that the URL path can be whatever you want, but you must include `'rest_framework.urls'` with the `'rest_framework'` namespace. You may leave out the namespace in Django 1.9+, and REST framework will set it for you.
## Example ## Example
...@@ -231,7 +231,7 @@ Send a description of the issue via email to [rest-framework-security@googlegrou ...@@ -231,7 +231,7 @@ Send a description of the issue via email to [rest-framework-security@googlegrou
## License ## License
Copyright (c) 2011-2015, Tom Christie Copyright (c) 2011-2016, Tom Christie
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
...@@ -258,6 +258,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ...@@ -258,6 +258,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[eventbrite]: https://www.eventbrite.co.uk/about/ [eventbrite]: https://www.eventbrite.co.uk/about/
[markdown]: http://pypi.python.org/pypi/Markdown/ [markdown]: http://pypi.python.org/pypi/Markdown/
[django-filter]: http://pypi.python.org/pypi/django-filter [django-filter]: http://pypi.python.org/pypi/django-filter
[django-crispy-forms]: https://github.com/maraujop/django-crispy-forms
[django-guardian]: https://github.com/lukaszb/django-guardian [django-guardian]: https://github.com/lukaszb/django-guardian
[0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X [0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X
[image]: img/quickstart.png [image]: img/quickstart.png
......
...@@ -17,7 +17,7 @@ By default, the API will return the format specified by the headers, which in th ...@@ -17,7 +17,7 @@ By default, the API will return the format specified by the headers, which in th
## Customizing ## Customizing
The browsable API is built with [Twitter's Bootstrap][bootstrap] (v 2.1.1), making it easy to customize the look-and-feel. The browsable API is built with [Twitter's Bootstrap][bootstrap] (v 3.3.5), making it easy to customize the look-and-feel.
To customize the default style, create a template called `rest_framework/api.html` that extends from `rest_framework/base.html`. For example: To customize the default style, create a template called `rest_framework/api.html` that extends from `rest_framework/base.html`. For example:
......
...@@ -12,23 +12,29 @@ The most common way to document Web APIs today is to produce documentation that ...@@ -12,23 +12,29 @@ The most common way to document Web APIs today is to produce documentation that
--- ---
#### Django REST Swagger #### DRF Docs
Marc Gibbons' [Django REST Swagger][django-rest-swagger] integrates REST framework with the [Swagger][swagger] API documentation tool. The package produces well presented API documentation, and includes interactive tools for testing API endpoints. [DRF Docs][drfdocs-repo] allows you to document Web APIs made with Django REST Framework and it is authored by Emmanouil Konstantinidis. It's made to work out of the box and its setup should not take more than a couple of minutes. Complete documentation can be found on the [website][drfdocs-website] while there is also a [demo][drfdocs-demo] available for people to see what it looks like.
The package is fully documented, well supported, and comes highly recommended. Features include customizing the template with your branding, settings for hiding the docs depending on the environment and more.
Django REST Swagger supports REST framework versions 2.3 and above. Both this package and Django REST Swagger are fully documented, well supported, and come highly recommended.
![Screenshot - Django REST Swagger][image-django-rest-swagger] ![Screenshot - DRF docs][image-drf-docs]
--- ---
#### REST Framework Docs #### Django REST Swagger
The [REST Framework Docs][rest-framework-docs] package is an earlier project, also by Marc Gibbons, that offers clean, simple autogenerated documentation for your API. Marc Gibbons' [Django REST Swagger][django-rest-swagger] integrates REST framework with the [Swagger][swagger] API documentation tool. The package produces well presented API documentation, and includes interactive tools for testing API endpoints.
![Screenshot - REST Framework Docs][image-rest-framework-docs] Django REST Swagger supports REST framework versions 2.3 and above.
Mark is also the author of the [REST Framework Docs][rest-framework-docs] package which offers clean, simple autogenerated documentation for your API but is deprecated and has moved to Django REST Swagger.
Both this package and DRF docs are fully documented, well supported, and come highly recommended.
![Screenshot - Django REST Swagger][image-django-rest-swagger]
--- ---
...@@ -100,13 +106,16 @@ In this approach, rather than documenting the available API endpoints up front, ...@@ -100,13 +106,16 @@ In this approach, rather than documenting the available API endpoints up front,
To implement a hypermedia API you'll need to decide on an appropriate media type for the API, and implement a custom renderer and parser for that media type. The [REST, Hypermedia & HATEOAS][hypermedia-docs] section of the documentation includes pointers to background reading, as well as links to various hypermedia formats. To implement a hypermedia API you'll need to decide on an appropriate media type for the API, and implement a custom renderer and parser for that media type. The [REST, Hypermedia & HATEOAS][hypermedia-docs] section of the documentation includes pointers to background reading, as well as links to various hypermedia formats.
[cite]: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven [cite]: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
[drfdocs-repo]: https://github.com/ekonstantinidis/django-rest-framework-docs
[drfdocs-website]: http://www.drfdocs.com/
[drfdocs-demo]: http://demo.drfdocs.com/
[django-rest-swagger]: https://github.com/marcgibbons/django-rest-swagger [django-rest-swagger]: https://github.com/marcgibbons/django-rest-swagger
[swagger]: https://developers.helloreverb.com/swagger/ [swagger]: https://developers.helloreverb.com/swagger/
[rest-framework-docs]: https://github.com/marcgibbons/django-rest-framework-docs [rest-framework-docs]: https://github.com/marcgibbons/django-rest-framework-docs
[apiary]: http://apiary.io/ [apiary]: http://apiary.io/
[markdown]: http://daringfireball.net/projects/markdown/ [markdown]: http://daringfireball.net/projects/markdown/
[hypermedia-docs]: rest-hypermedia-hateoas.md [hypermedia-docs]: rest-hypermedia-hateoas.md
[image-drf-docs]: ../img/drfdocs.png
[image-django-rest-swagger]: ../img/django-rest-swagger.png [image-django-rest-swagger]: ../img/django-rest-swagger.png
[image-rest-framework-docs]: ../img/rest-framework-docs.png
[image-apiary]: ../img/apiary.png [image-apiary]: ../img/apiary.png
[image-self-describing-api]: ../img/self-describing.png [image-self-describing-api]: ../img/self-describing.png
...@@ -40,6 +40,28 @@ You can determine your currently installed version using `pip freeze`: ...@@ -40,6 +40,28 @@ You can determine your currently installed version using `pip freeze`:
## 3.3.x series ## 3.3.x series
### 3.3.2
**Date**: [14th December 2015][3.3.2-milestone].
* `ListField` enforces input is a list. ([#3513][gh3513])
* Fix regression hiding raw data form. ([#3600][gh3600], [#3578][gh3578])
* Fix Python 3.5 compatibility. ([#3534][gh3534], [#3626][gh3626])
* Allow setting a custom Django Paginator in `pagination.PageNumberPagination`. ([#3631][gh3631], [#3684][gh3684])
* Fix relational fields without `to_fields` attribute. ([#3635][gh3635], [#3634][gh3634])
* Fix `template.render` deprecation warnings for Django 1.9. ([#3654][gh3654])
* Sort response headers in browsable API renderer. ([#3655][gh3655])
* Use related_objects api for Django 1.9+. ([#3656][gh3656], [#3252][gh3252])
* Add confirm modal when deleting. ([#3228][gh3228], [#3662][gh3662])
* Reveal previously hidden AttributeErrors and TypeErrors while calling has_[object_]permissions. ([#3668][gh3668])
* Make DRF compatible with multi template engine in Django 1.8. ([#3672][gh3672])
* Update `NestedBoundField` to also handle empty string when rendering its form. ([#3677][gh3677])
* Fix UUID validation to properly catch invalid input types. ([#3687][gh3687], [#3679][gh3679])
* Fix caching issues. ([#3628][gh3628], [#3701][gh3701])
* Fix Admin and API browser for views without a filter_class. ([#3705][gh3705], [#3596][gh3596], [#3597][gh3597])
* Add app_name to rest_framework.urls. ([#3714][gh3714])
* Improve authtoken's views to support url versioning. ([#3718][gh3718], [#3723][gh3723])
### 3.3.1 ### 3.3.1
**Date**: [4th November 2015][3.3.1-milestone]. **Date**: [4th November 2015][3.3.1-milestone].
...@@ -347,6 +369,7 @@ For older release notes, [please see the version 2.x documentation][old-release- ...@@ -347,6 +369,7 @@ For older release notes, [please see the version 2.x documentation][old-release-
[3.2.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.5+Release%22 [3.2.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.2.5+Release%22
[3.3.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.0+Release%22 [3.3.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.0+Release%22
[3.3.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.1+Release%22 [3.3.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.1+Release%22
[3.3.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.3.2+Release%22
<!-- 3.0.1 --> <!-- 3.0.1 -->
[gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013 [gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013
...@@ -596,3 +619,33 @@ For older release notes, [please see the version 2.x documentation][old-release- ...@@ -596,3 +619,33 @@ For older release notes, [please see the version 2.x documentation][old-release-
[gh3568]: https://github.com/tomchristie/django-rest-framework/issues/3568 [gh3568]: https://github.com/tomchristie/django-rest-framework/issues/3568
[gh3592]: https://github.com/tomchristie/django-rest-framework/issues/3592 [gh3592]: https://github.com/tomchristie/django-rest-framework/issues/3592
[gh3593]: https://github.com/tomchristie/django-rest-framework/issues/3593 [gh3593]: https://github.com/tomchristie/django-rest-framework/issues/3593
<!-- 3.3.2 -->
[gh3228]: https://github.com/tomchristie/django-rest-framework/issues/3228
[gh3252]: https://github.com/tomchristie/django-rest-framework/issues/3252
[gh3513]: https://github.com/tomchristie/django-rest-framework/issues/3513
[gh3534]: https://github.com/tomchristie/django-rest-framework/issues/3534
[gh3578]: https://github.com/tomchristie/django-rest-framework/issues/3578
[gh3596]: https://github.com/tomchristie/django-rest-framework/issues/3596
[gh3597]: https://github.com/tomchristie/django-rest-framework/issues/3597
[gh3600]: https://github.com/tomchristie/django-rest-framework/issues/3600
[gh3626]: https://github.com/tomchristie/django-rest-framework/issues/3626
[gh3628]: https://github.com/tomchristie/django-rest-framework/issues/3628
[gh3631]: https://github.com/tomchristie/django-rest-framework/issues/3631
[gh3634]: https://github.com/tomchristie/django-rest-framework/issues/3634
[gh3635]: https://github.com/tomchristie/django-rest-framework/issues/3635
[gh3654]: https://github.com/tomchristie/django-rest-framework/issues/3654
[gh3655]: https://github.com/tomchristie/django-rest-framework/issues/3655
[gh3656]: https://github.com/tomchristie/django-rest-framework/issues/3656
[gh3662]: https://github.com/tomchristie/django-rest-framework/issues/3662
[gh3668]: https://github.com/tomchristie/django-rest-framework/issues/3668
[gh3672]: https://github.com/tomchristie/django-rest-framework/issues/3672
[gh3677]: https://github.com/tomchristie/django-rest-framework/issues/3677
[gh3679]: https://github.com/tomchristie/django-rest-framework/issues/3679
[gh3684]: https://github.com/tomchristie/django-rest-framework/issues/3684
[gh3687]: https://github.com/tomchristie/django-rest-framework/issues/3687
[gh3701]: https://github.com/tomchristie/django-rest-framework/issues/3701
[gh3705]: https://github.com/tomchristie/django-rest-framework/issues/3705
[gh3714]: https://github.com/tomchristie/django-rest-framework/issues/3714
[gh3718]: https://github.com/tomchristie/django-rest-framework/issues/3718
[gh3723]: https://github.com/tomchristie/django-rest-framework/issues/3723
...@@ -202,6 +202,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque ...@@ -202,6 +202,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
* [django-rest-framework-mongoengine][django-rest-framework-mongoengine] - Serializer class that supports using MongoDB as the storage layer for Django REST framework. * [django-rest-framework-mongoengine][django-rest-framework-mongoengine] - Serializer class that supports using MongoDB as the storage layer for Django REST framework.
* [djangorestframework-gis][djangorestframework-gis] - Geographic add-ons * [djangorestframework-gis][djangorestframework-gis] - Geographic add-ons
* [djangorestframework-hstore][djangorestframework-hstore] - Serializer class to support django-hstore DictionaryField model field and its schema-mode feature. * [djangorestframework-hstore][djangorestframework-hstore] - Serializer class to support django-hstore DictionaryField model field and its schema-mode feature.
* [djangorestframework-jsonapi][djangorestframework-jsonapi] - Provides a parser, renderer, serializers, and other tools to help build an API that is compliant with the jsonapi.org spec.
### Serializer fields ### Serializer fields
...@@ -222,11 +223,13 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque ...@@ -222,11 +223,13 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
### Parsers ### Parsers
* [djangorestframework-msgpack][djangorestframework-msgpack] - Provides MessagePack renderer and parser support. * [djangorestframework-msgpack][djangorestframework-msgpack] - Provides MessagePack renderer and parser support.
* [djangorestframework-jsonapi][djangorestframework-jsonapi] - Provides a parser, renderer, serializers, and other tools to help build an API that is compliant with the jsonapi.org spec.
* [djangorestframework-camel-case][djangorestframework-camel-case] - Provides camel case JSON renderers and parsers. * [djangorestframework-camel-case][djangorestframework-camel-case] - Provides camel case JSON renderers and parsers.
### Renderers ### Renderers
* [djangorestframework-csv][djangorestframework-csv] - Provides CSV renderer support. * [djangorestframework-csv][djangorestframework-csv] - Provides CSV renderer support.
* [djangorestframework-jsonapi][djangorestframework-jsonapi] - Provides a parser, renderer, serializers, and other tools to help build an API that is compliant with the jsonapi.org spec.
* [drf_ujson][drf_ujson] - Implements JSON rendering using the UJSON package. * [drf_ujson][drf_ujson] - Implements JSON rendering using the UJSON package.
* [rest-pandas][rest-pandas] - Pandas DataFrame-powered renderers including Excel, CSV, and SVG formats. * [rest-pandas][rest-pandas] - Pandas DataFrame-powered renderers including Excel, CSV, and SVG formats.
...@@ -351,3 +354,4 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque ...@@ -351,3 +354,4 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
[cookiecutter-django-rest]: https://github.com/agconti/cookiecutter-django-rest [cookiecutter-django-rest]: https://github.com/agconti/cookiecutter-django-rest
[drf-haystack]: http://drf-haystack.readthedocs.org/en/latest/ [drf-haystack]: http://drf-haystack.readthedocs.org/en/latest/
[django-rest-framework-version-transforms]: https://github.com/mrhwick/django-rest-framework-version-transforms [django-rest-framework-version-transforms]: https://github.com/mrhwick/django-rest-framework-version-transforms
[djangorestframework-jsonapi]: https://github.com/django-json-api/django-rest-framework-json-api
...@@ -48,12 +48,6 @@ We'll need to add our new `snippets` app and the `rest_framework` app to `INSTAL ...@@ -48,12 +48,6 @@ We'll need to add our new `snippets` app and the `rest_framework` app to `INSTAL
'snippets', 'snippets',
) )
We also need to wire up the root urlconf, in the `tutorial/urls.py` file, to include our snippet app's URLs.
urlpatterns = [
url(r'^', include('snippets.urls')),
]
Okay, we're ready to roll. Okay, we're ready to roll.
## Creating a model to work with ## Creating a model to work with
...@@ -199,16 +193,16 @@ Open the file `snippets/serializers.py` again, and replace the `SnippetSerialize ...@@ -199,16 +193,16 @@ Open the file `snippets/serializers.py` again, and replace the `SnippetSerialize
One nice property that serializers have is that you can inspect all the fields in a serializer instance, by printing its representation. Open the Django shell with `python manage.py shell`, then try the following: One nice property that serializers have is that you can inspect all the fields in a serializer instance, by printing its representation. Open the Django shell with `python manage.py shell`, then try the following:
>>> from snippets.serializers import SnippetSerializer from snippets.serializers import SnippetSerializer
>>> serializer = SnippetSerializer() serializer = SnippetSerializer()
>>> print(repr(serializer)) print(repr(serializer))
SnippetSerializer(): # SnippetSerializer():
id = IntegerField(label='ID', read_only=True) # id = IntegerField(label='ID', read_only=True)
title = CharField(allow_blank=True, max_length=100, required=False) # title = CharField(allow_blank=True, max_length=100, required=False)
code = CharField(style={'base_template': 'textarea.html'}) # code = CharField(style={'base_template': 'textarea.html'})
linenos = BooleanField(required=False) # linenos = BooleanField(required=False)
language = ChoiceField(choices=[('Clipper', 'FoxPro'), ('Cucumber', 'Gherkin'), ('RobotFramework', 'RobotFramework'), ('abap', 'ABAP'), ('ada', 'Ada')... # language = ChoiceField(choices=[('Clipper', 'FoxPro'), ('Cucumber', 'Gherkin'), ('RobotFramework', 'RobotFramework'), ('abap', 'ABAP'), ('ada', 'Ada')...
style = ChoiceField(choices=[('autumn', 'autumn'), ('borland', 'borland'), ('bw', 'bw'), ('colorful', 'colorful')... # style = ChoiceField(choices=[('autumn', 'autumn'), ('borland', 'borland'), ('bw', 'bw'), ('colorful', 'colorful')...
It's important to remember that `ModelSerializer` classes don't do anything particularly magical, they are simply a shortcut for creating serializer classes: It's important to remember that `ModelSerializer` classes don't do anything particularly magical, they are simply a shortcut for creating serializer classes:
...@@ -299,6 +293,14 @@ Finally we need to wire these views up. Create the `snippets/urls.py` file: ...@@ -299,6 +293,14 @@ Finally we need to wire these views up. Create the `snippets/urls.py` file:
url(r'^snippets/$', views.snippet_list), url(r'^snippets/$', views.snippet_list),
url(r'^snippets/(?P<pk>[0-9]+)/$', views.snippet_detail), url(r'^snippets/(?P<pk>[0-9]+)/$', views.snippet_detail),
] ]
We also need to wire up the root urlconf, in the `tutorial/urls.py` file, to include our snippet app's URLs.
from django.conf.urls import url, include
urlpatterns = [
url(r'^', include('snippets.urls')),
]
It's worth noting that there are a couple of edge cases we're not dealing with properly at the moment. If we send malformed `json`, or if a request is made with a method that the view doesn't handle, then we'll end up with a 500 "server error" response. Still, this'll do for now. It's worth noting that there are a couple of edge cases we're not dealing with properly at the moment. If we send malformed `json`, or if a request is made with a method that the view doesn't handle, then we'll end up with a 500 "server error" response. Still, this'll do for now.
......
...@@ -146,7 +146,7 @@ And, at the end of the file, add a pattern to include the login and logout views ...@@ -146,7 +146,7 @@ And, at the end of the file, add a pattern to include the login and logout views
namespace='rest_framework')), namespace='rest_framework')),
] ]
The `r'^api-auth/'` part of pattern can actually be whatever URL you want to use. The only restriction is that the included urls must use the `'rest_framework'` namespace. The `r'^api-auth/'` part of pattern can actually be whatever URL you want to use. The only restriction is that the included urls must use the `'rest_framework'` namespace. In Django 1.9+, REST framework will set the namespace, so you may leave it out.
Now if you open up the browser again and refresh the page you'll see a 'Login' link in the top right of the page. If you log in as one of the users you created earlier, you'll be able to create code snippets again. Now if you open up the browser again and refresh the page you'll see a 'Login' link in the top right of the page. If you log in as one of the users you created earlier, you'll be able to create code snippets again.
......
...@@ -3,4 +3,4 @@ flake8==2.4.0 ...@@ -3,4 +3,4 @@ flake8==2.4.0
pep8==1.5.7 pep8==1.5.7
# Sort and lint imports # Sort and lint imports
isort==3.9.6 isort==4.2.2
# Optional packages which may be used with REST framework. # Optional packages which may be used with REST framework.
markdown==2.6.4 markdown==2.6.4
django-guardian==1.3.0 django-guardian==1.3.2
django-filter==0.10.0 django-filter==0.10.0
...@@ -5,4 +5,4 @@ wheel==0.24.0 ...@@ -5,4 +5,4 @@ wheel==0.24.0
twine==1.4.0 twine==1.4.0
# Transifex client for managing translation resources. # Transifex client for managing translation resources.
transifex-client==0.11b3 transifex-client==0.11
# PyTest for running the tests. # PyTest for running the tests.
pytest==2.6.4 pytest==2.8.5
pytest-django==2.8.0 pytest-django==2.9.1
pytest-cov==1.8.1 pytest-cov==1.8.1
...@@ -8,10 +8,10 @@ ______ _____ _____ _____ __ ...@@ -8,10 +8,10 @@ ______ _____ _____ _____ __
""" """
__title__ = 'Django REST framework' __title__ = 'Django REST framework'
__version__ = '3.3.1' __version__ = '3.3.2'
__author__ = 'Tom Christie' __author__ = 'Tom Christie'
__license__ = 'BSD 2-Clause' __license__ = 'BSD 2-Clause'
__copyright__ = 'Copyright 2011-2015 Tom Christie' __copyright__ = 'Copyright 2011-2016 Tom Christie'
# Version synonym # Version synonym
VERSION = __version__ VERSION = __version__
......
...@@ -10,7 +10,6 @@ from django.middleware.csrf import CsrfViewMiddleware ...@@ -10,7 +10,6 @@ from django.middleware.csrf import CsrfViewMiddleware
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from rest_framework import HTTP_HEADER_ENCODING, exceptions from rest_framework import HTTP_HEADER_ENCODING, exceptions
from rest_framework.authtoken.models import Token
def get_authorization_header(request): def get_authorization_header(request):
...@@ -149,7 +148,14 @@ class TokenAuthentication(BaseAuthentication): ...@@ -149,7 +148,14 @@ class TokenAuthentication(BaseAuthentication):
Authorization: Token 401f7ac837da42b97f613d789819ff93537bee6a Authorization: Token 401f7ac837da42b97f613d789819ff93537bee6a
""" """
model = Token model = None
def get_model(self):
if self.model is not None:
return self.model
from rest_framework.authtoken.models import Token
return Token
""" """
A custom token model may be used, but must have the following properties. A custom token model may be used, but must have the following properties.
...@@ -179,9 +185,10 @@ class TokenAuthentication(BaseAuthentication): ...@@ -179,9 +185,10 @@ class TokenAuthentication(BaseAuthentication):
return self.authenticate_credentials(token) return self.authenticate_credentials(token)
def authenticate_credentials(self, key): def authenticate_credentials(self, key):
model = self.get_model()
try: try:
token = self.model.objects.select_related('user').get(key=key) token = model.objects.select_related('user').get(key=key)
except self.model.DoesNotExist: except model.DoesNotExist:
raise exceptions.AuthenticationFailed(_('Invalid token.')) raise exceptions.AuthenticationFailed(_('Invalid token.'))
if not token.user.is_active: if not token.user.is_active:
......
...@@ -18,17 +18,10 @@ class Token(models.Model): ...@@ -18,17 +18,10 @@ class Token(models.Model):
The default authorization token model. The default authorization token model.
""" """
key = models.CharField(max_length=40, primary_key=True) key = models.CharField(max_length=40, primary_key=True)
user = models.OneToOneField(AUTH_USER_MODEL, related_name='auth_token') user = models.OneToOneField(AUTH_USER_MODEL, related_name='auth_token',
on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
class Meta:
# Work around for a bug in Django:
# https://code.djangoproject.com/ticket/19422
#
# Also see corresponding ticket:
# https://github.com/tomchristie/django-rest-framework/issues/705
abstract = 'rest_framework.authtoken' not in settings.INSTALLED_APPS
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.key: if not self.key:
self.key = self.generate_key() self.key = self.generate_key()
......
...@@ -12,7 +12,7 @@ class ObtainAuthToken(APIView): ...@@ -12,7 +12,7 @@ class ObtainAuthToken(APIView):
renderer_classes = (renderers.JSONRenderer,) renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializer serializer_class = AuthTokenSerializer
def post(self, request): def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data) serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user'] user = serializer.validated_data['user']
......
...@@ -9,6 +9,7 @@ from __future__ import unicode_literals ...@@ -9,6 +9,7 @@ from __future__ import unicode_literals
import django import django
from django.conf import settings from django.conf import settings
from django.db import connection, transaction from django.db import connection, transaction
from django.template import Context, RequestContext, Template
from django.utils import six from django.utils import six
from django.views.generic import View from django.views.generic import View
...@@ -200,6 +201,7 @@ try: ...@@ -200,6 +201,7 @@ try:
except ImportError: except ImportError:
DecimalValidator = None DecimalValidator = None
def set_rollback(): def set_rollback():
if hasattr(transaction, 'set_rollback'): if hasattr(transaction, 'set_rollback'):
if connection.settings_dict.get('ATOMIC_REQUESTS', False): if connection.settings_dict.get('ATOMIC_REQUESTS', False):
...@@ -215,3 +217,54 @@ def set_rollback(): ...@@ -215,3 +217,54 @@ def set_rollback():
else: else:
# transaction not managed # transaction not managed
pass pass
def template_render(template, context=None, request=None):
"""
Passing Context or RequestContext to Template.render is deprecated in 1.9+,
see https://github.com/django/django/pull/3883 and
https://github.com/django/django/blob/1.9rc1/django/template/backends/django.py#L82-L84
:param template: Template instance
:param context: dict
:param request: Request instance
:return: rendered template as SafeText instance
"""
if django.VERSION < (1, 8) or isinstance(template, Template):
if request:
context = RequestContext(request, context)
else:
context = Context(context)
return template.render(context)
# backends template, e.g. django.template.backends.django.Template
else:
return template.render(context, request=request)
def get_all_related_objects(opts):
"""
Django 1.8 changed meta api, see
https://docs.djangoproject.com/en/1.8/ref/models/meta/#migrating-old-meta-api
https://code.djangoproject.com/ticket/12663
https://github.com/django/django/pull/3848
:param opts: Options instance
:return: list of relations except many-to-many ones
"""
if django.VERSION < (1, 9):
return opts.get_all_related_objects()
else:
return [r for r in opts.related_objects if not r.field.many_to_many]
def get_all_related_many_to_many_objects(opts):
"""
Django 1.8 changed meta api, see docstr in compat.get_all_related_objects()
:param opts: Options instance
:return: list of many-to-many relations
"""
if django.VERSION < (1, 9):
return opts.get_all_related_many_to_many_objects()
else:
return [r for r in opts.related_objects if r.field.many_to_many]
...@@ -769,9 +769,11 @@ class UUIDField(Field): ...@@ -769,9 +769,11 @@ class UUIDField(Field):
try: try:
if isinstance(data, six.integer_types): if isinstance(data, six.integer_types):
return uuid.UUID(int=data) return uuid.UUID(int=data)
else: elif isinstance(data, six.string_types):
return uuid.UUID(hex=data) return uuid.UUID(hex=data)
except (ValueError, TypeError): else:
self.fail('invalid', value=data)
except (ValueError):
self.fail('invalid', value=data) self.fail('invalid', value=data)
return data return data
...@@ -1059,6 +1061,9 @@ class DateTimeField(Field): ...@@ -1059,6 +1061,9 @@ class DateTimeField(Field):
self.fail('invalid', format=humanized_format) self.fail('invalid', format=humanized_format)
def to_representation(self, value): def to_representation(self, value):
if not value:
return None
output_format = getattr(self, 'format', api_settings.DATETIME_FORMAT) output_format = getattr(self, 'format', api_settings.DATETIME_FORMAT)
if output_format is None: if output_format is None:
...@@ -1116,11 +1121,11 @@ class DateField(Field): ...@@ -1116,11 +1121,11 @@ class DateField(Field):
self.fail('invalid', format=humanized_format) self.fail('invalid', format=humanized_format)
def to_representation(self, value): def to_representation(self, value):
output_format = getattr(self, 'format', api_settings.DATE_FORMAT)
if not value: if not value:
return None return None
output_format = getattr(self, 'format', api_settings.DATE_FORMAT)
if output_format is None: if output_format is None:
return value return value
...@@ -1134,7 +1139,7 @@ class DateField(Field): ...@@ -1134,7 +1139,7 @@ class DateField(Field):
) )
if output_format.lower() == ISO_8601: if output_format.lower() == ISO_8601:
if (isinstance(value, str)): if isinstance(value, six.string_types):
value = datetime.datetime.strptime(value, '%Y-%m-%d').date() value = datetime.datetime.strptime(value, '%Y-%m-%d').date()
return value.isoformat() return value.isoformat()
...@@ -1181,6 +1186,9 @@ class TimeField(Field): ...@@ -1181,6 +1186,9 @@ class TimeField(Field):
self.fail('invalid', format=humanized_format) self.fail('invalid', format=humanized_format)
def to_representation(self, value): def to_representation(self, value):
if not value:
return None
output_format = getattr(self, 'format', api_settings.TIME_FORMAT) output_format = getattr(self, 'format', api_settings.TIME_FORMAT)
if output_format is None: if output_format is None:
...@@ -1196,6 +1204,8 @@ class TimeField(Field): ...@@ -1196,6 +1204,8 @@ class TimeField(Field):
) )
if output_format.lower() == ISO_8601: if output_format.lower() == ISO_8601:
if isinstance(value, six.string_types):
value = datetime.datetime.strptime(value, '%H:%M:%S').time()
return value.isoformat() return value.isoformat()
return value.strftime(output_format) return value.strftime(output_format)
...@@ -1461,7 +1471,7 @@ class ListField(Field): ...@@ -1461,7 +1471,7 @@ class ListField(Field):
""" """
if html.is_html_input(data): if html.is_html_input(data):
data = html.parse_html_list(data) data = html.parse_html_list(data)
if isinstance(data, type('')) or not hasattr(data, '__iter__'): if isinstance(data, type('')) or isinstance(data, collections.Mapping) or not hasattr(data, '__iter__'):
self.fail('not_a_list', input_type=type(data).__name__) self.fail('not_a_list', input_type=type(data).__name__)
if not self.allow_empty and len(data) == 0: if not self.allow_empty and len(data) == 0:
self.fail('empty') self.fail('empty')
...@@ -1565,7 +1575,7 @@ class ReadOnlyField(Field): ...@@ -1565,7 +1575,7 @@ class ReadOnlyField(Field):
For example, the following would call `get_expiry_date()` on the object: For example, the following would call `get_expiry_date()` on the object:
class ExampleSerializer(self): class ExampleSerializer(Serializer):
expiry_date = ReadOnlyField(source='get_expiry_date') expiry_date = ReadOnlyField(source='get_expiry_date')
""" """
......
...@@ -10,12 +10,12 @@ from functools import reduce ...@@ -10,12 +10,12 @@ from functools import reduce
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.db import models from django.db import models
from django.template import Context, loader from django.template import loader
from django.utils import six from django.utils import six
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from rest_framework.compat import ( from rest_framework.compat import (
crispy_forms, distinct, django_filters, guardian crispy_forms, distinct, django_filters, guardian, template_render
) )
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
...@@ -99,7 +99,7 @@ class DjangoFilterBackend(BaseFilterBackend): ...@@ -99,7 +99,7 @@ class DjangoFilterBackend(BaseFilterBackend):
return filter_class return filter_class
if filter_fields: if filter_fields:
class AutoFilterSet(FilterSet): class AutoFilterSet(self.default_filter_set):
class Meta: class Meta:
model = queryset.model model = queryset.model
fields = filter_fields fields = filter_fields
...@@ -118,15 +118,14 @@ class DjangoFilterBackend(BaseFilterBackend): ...@@ -118,15 +118,14 @@ class DjangoFilterBackend(BaseFilterBackend):
def to_html(self, request, queryset, view): def to_html(self, request, queryset, view):
filter_class = self.get_filter_class(view, queryset) filter_class = self.get_filter_class(view, queryset)
if filter_class: if not filter_class:
filter_instance = filter_class(request.query_params, queryset=queryset) return None
else: filter_instance = filter_class(request.query_params, queryset=queryset)
filter_instance = None context = {
context = Context({
'filter': filter_instance 'filter': filter_instance
}) }
template = loader.get_template(self.template) template = loader.get_template(self.template)
return template.render(context) return template_render(template, context)
class SearchFilter(BaseFilterBackend): class SearchFilter(BaseFilterBackend):
...@@ -185,12 +184,12 @@ class SearchFilter(BaseFilterBackend): ...@@ -185,12 +184,12 @@ class SearchFilter(BaseFilterBackend):
term = self.get_search_terms(request) term = self.get_search_terms(request)
term = term[0] if term else '' term = term[0] if term else ''
context = Context({ context = {
'param': self.search_param, 'param': self.search_param,
'term': term 'term': term
}) }
template = loader.get_template(self.template) template = loader.get_template(self.template)
return template.render(context) return template_render(template, context)
class OrderingFilter(BaseFilterBackend): class OrderingFilter(BaseFilterBackend):
...@@ -284,8 +283,8 @@ class OrderingFilter(BaseFilterBackend): ...@@ -284,8 +283,8 @@ class OrderingFilter(BaseFilterBackend):
def to_html(self, request, queryset, view): def to_html(self, request, queryset, view):
template = loader.get_template(self.template) template = loader.get_template(self.template)
context = Context(self.get_template_context(request, queryset, view)) context = self.get_template_context(request, queryset, view)
return template.render(context) return template_render(template, context)
class DjangoObjectPermissionsFilter(BaseFilterBackend): class DjangoObjectPermissionsFilter(BaseFilterBackend):
......
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Acoli (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ach/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ach\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:185
msgid "Invalid token."
msgstr ""
#: authtoken/serializers.py:20
msgid "User account is disabled."
msgstr ""
#: authtoken/serializers.py:23
msgid "Unable to log in with provided credentials."
msgstr ""
#: authtoken/serializers.py:26
msgid "Must include \"username\" and \"password\"."
msgstr ""
#: exceptions.py:49
msgid "A server error occurred."
msgstr ""
#: exceptions.py:84
msgid "Malformed request."
msgstr ""
#: exceptions.py:89
msgid "Incorrect authentication credentials."
msgstr ""
#: exceptions.py:94
msgid "Authentication credentials were not provided."
msgstr ""
#: exceptions.py:99
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
#: exceptions.py:120
msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
#: exceptions.py:145
msgid "Request was throttled."
msgstr ""
#: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:889
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty."
msgstr ""
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:326
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2
msgid "None"
msgstr ""
#: templates/rest_framework/horizontal/select_multiple.html:2
#: templates/rest_framework/inline/select_multiple.html:2
#: templates/rest_framework/vertical/select_multiple.html:2
msgid "No items to select."
msgstr ""
#: validators.py:24
msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
#: versioning.py:42
msgid "Invalid version in \"Accept\" header."
msgstr ""
#: versioning.py:73 versioning.py:115
msgid "Invalid version in URL path."
msgstr ""
#: versioning.py:144
msgid "Invalid version in hostname."
msgstr ""
#: versioning.py:166
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:88
msgid "Permission denied."
msgstr ""
...@@ -7,8 +7,8 @@ msgid "" ...@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Django REST framework\n" "Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n" "POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n" "PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n" "Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Belarusian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/be/)\n" "Language-Team: Belarusian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/be/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
...@@ -33,24 +33,24 @@ msgstr "" ...@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password." msgid "Invalid username/password."
msgstr "" msgstr ""
#: authentication.py:101 authentication.py:189 #: authentication.py:101 authentication.py:188
msgid "User inactive or deleted." msgid "User inactive or deleted."
msgstr "" msgstr ""
#: authentication.py:168 #: authentication.py:167
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication.py:171 #: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces." msgid "Invalid token header. Token string should not contain spaces."
msgstr "" msgstr ""
#: authentication.py:177 #: authentication.py:176
msgid "" msgid ""
"Invalid token header. Token string should not contain invalid characters." "Invalid token header. Token string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication.py:186 #: authentication.py:185
msgid "Invalid token." msgid "Invalid token."
msgstr "" msgstr ""
...@@ -108,241 +108,267 @@ msgstr "" ...@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled." msgid "Request was throttled."
msgstr "" msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79 #: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162 #: validators.py:162
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
#: fields.py:263 #: fields.py:267
msgid "This field may not be null." msgid "This field may not be null."
msgstr "" msgstr ""
#: fields.py:599 fields.py:627 #: fields.py:603 fields.py:634
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid boolean." msgid "\"{input}\" is not a valid boolean."
msgstr "" msgstr ""
#: fields.py:662 #: fields.py:669
msgid "This field may not be blank." msgid "This field may not be blank."
msgstr "" msgstr ""
#: fields.py:663 fields.py:1594 #: fields.py:670 fields.py:1656
#, python-brace-format #, python-brace-format
msgid "Ensure this field has no more than {max_length} characters." msgid "Ensure this field has no more than {max_length} characters."
msgstr "" msgstr ""
#: fields.py:664 #: fields.py:671
#, python-brace-format #, python-brace-format
msgid "Ensure this field has at least {min_length} characters." msgid "Ensure this field has at least {min_length} characters."
msgstr "" msgstr ""
#: fields.py:701 #: fields.py:708
msgid "Enter a valid email address." msgid "Enter a valid email address."
msgstr "" msgstr ""
#: fields.py:712 #: fields.py:719
msgid "This value does not match the required pattern." msgid "This value does not match the required pattern."
msgstr "" msgstr ""
#: fields.py:723 #: fields.py:730
msgid "" msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or " "Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens." "hyphens."
msgstr "" msgstr ""
#: fields.py:735 #: fields.py:742
msgid "Enter a valid URL." msgid "Enter a valid URL."
msgstr "" msgstr ""
#: fields.py:748 #: fields.py:755
#, python-brace-format #, python-brace-format
msgid "\"{value}\" is not a valid UUID." msgid "\"{value}\" is not a valid UUID."
msgstr "" msgstr ""
#: fields.py:782 #: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address." msgid "Enter a valid IPv4 or IPv6 address."
msgstr "" msgstr ""
#: fields.py:807 #: fields.py:816
msgid "A valid integer is required." msgid "A valid integer is required."
msgstr "" msgstr ""
#: fields.py:808 fields.py:843 fields.py:876 #: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format #, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}." msgid "Ensure this value is less than or equal to {max_value}."
msgstr "" msgstr ""
#: fields.py:809 fields.py:844 fields.py:877 #: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format #, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}." msgid "Ensure this value is greater than or equal to {min_value}."
msgstr "" msgstr ""
#: fields.py:810 fields.py:845 fields.py:881 #: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large." msgid "String value too large."
msgstr "" msgstr ""
#: fields.py:842 fields.py:875 #: fields.py:851 fields.py:884
msgid "A valid number is required." msgid "A valid number is required."
msgstr "" msgstr ""
#: fields.py:878 #: fields.py:887
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total." msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr "" msgstr ""
#: fields.py:879 #: fields.py:888
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places." "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr "" msgstr ""
#: fields.py:880 #: fields.py:889
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the " "Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point." "decimal point."
msgstr "" msgstr ""
#: fields.py:994 #: fields.py:1004
#, python-brace-format #, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:995 #: fields.py:1005
msgid "Expected a datetime but got a date." msgid "Expected a datetime but got a date."
msgstr "" msgstr ""
#: fields.py:1060 #: fields.py:1079
#, python-brace-format #, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}." msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1061 #: fields.py:1080
msgid "Expected a date but got a datetime." msgid "Expected a date but got a datetime."
msgstr "" msgstr ""
#: fields.py:1125 #: fields.py:1148
#, python-brace-format #, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}." msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1180 #: fields.py:1207
#, python-brace-format #, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}." msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1205 fields.py:1254 #: fields.py:1232 fields.py:1281
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid choice." msgid "\"{input}\" is not a valid choice."
msgstr "" msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427 #: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format #, python-brace-format
msgid "More than {count} items..." msgid "More than {count} items..."
msgstr "" msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504 #: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format #, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"." msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: fields.py:1256 #: fields.py:1283
msgid "This selection may not be empty." msgid "This selection may not be empty."
msgstr "" msgstr ""
#: fields.py:1294 #: fields.py:1320
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid path choice." msgid "\"{input}\" is not a valid path choice."
msgstr "" msgstr ""
#: fields.py:1313 #: fields.py:1339
msgid "No file was submitted." msgid "No file was submitted."
msgstr "" msgstr ""
#: fields.py:1314 #: fields.py:1340
msgid "" msgid ""
"The submitted data was not a file. Check the encoding type on the form." "The submitted data was not a file. Check the encoding type on the form."
msgstr "" msgstr ""
#: fields.py:1315 #: fields.py:1341
msgid "No filename could be determined." msgid "No filename could be determined."
msgstr "" msgstr ""
#: fields.py:1316 #: fields.py:1342
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr ""
#: fields.py:1317 #: fields.py:1343
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})." "Ensure this filename has at most {max_length} characters (it has {length})."
msgstr "" msgstr ""
#: fields.py:1363 #: fields.py:1391
msgid "" msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505 #: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty." msgid "This list may not be empty."
msgstr "" msgstr ""
#: fields.py:1452 #: fields.py:1483
#, python-brace-format #, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"." msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: pagination.py:192 #: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format #, python-brace-format
msgid "Invalid page \"{page_number}\": {message}." msgid "Invalid page \"{page_number}\": {message}."
msgstr "" msgstr ""
#: pagination.py:462 #: pagination.py:407
msgid "Invalid cursor" msgid "Invalid cursor"
msgstr "" msgstr ""
#: relations.py:192 #: relations.py:196
#, python-brace-format #, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist." msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "" msgstr ""
#: relations.py:193 #: relations.py:197
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}." msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr "" msgstr ""
#: relations.py:225 #: relations.py:229
msgid "Invalid hyperlink - No URL match." msgid "Invalid hyperlink - No URL match."
msgstr "" msgstr ""
#: relations.py:226 #: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match." msgid "Invalid hyperlink - Incorrect URL match."
msgstr "" msgstr ""
#: relations.py:227 #: relations.py:231
msgid "Invalid hyperlink - Object does not exist." msgid "Invalid hyperlink - Object does not exist."
msgstr "" msgstr ""
#: relations.py:228 #: relations.py:232
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}." msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "" msgstr ""
#: relations.py:387 #: relations.py:391
#, python-brace-format #, python-brace-format
msgid "Object with {slug_name}={value} does not exist." msgid "Object with {slug_name}={value} does not exist."
msgstr "" msgstr ""
#: relations.py:388 #: relations.py:392
msgid "Invalid value." msgid "Invalid value."
msgstr "" msgstr ""
#: serializers.py:310 #: serializers.py:326
#, python-brace-format #, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}." msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "" msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2 #: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2 #: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2 #: templates/rest_framework/vertical/radio.html:2
......
...@@ -7,8 +7,8 @@ msgid "" ...@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Django REST framework\n" "Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n" "POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n" "PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n" "Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Catalan (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ca_ES/)\n" "Language-Team: Catalan (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ca_ES/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
...@@ -33,24 +33,24 @@ msgstr "" ...@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password." msgid "Invalid username/password."
msgstr "" msgstr ""
#: authentication.py:101 authentication.py:189 #: authentication.py:101 authentication.py:188
msgid "User inactive or deleted." msgid "User inactive or deleted."
msgstr "" msgstr ""
#: authentication.py:168 #: authentication.py:167
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication.py:171 #: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces." msgid "Invalid token header. Token string should not contain spaces."
msgstr "" msgstr ""
#: authentication.py:177 #: authentication.py:176
msgid "" msgid ""
"Invalid token header. Token string should not contain invalid characters." "Invalid token header. Token string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication.py:186 #: authentication.py:185
msgid "Invalid token." msgid "Invalid token."
msgstr "" msgstr ""
...@@ -108,241 +108,267 @@ msgstr "" ...@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled." msgid "Request was throttled."
msgstr "" msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79 #: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162 #: validators.py:162
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
#: fields.py:263 #: fields.py:267
msgid "This field may not be null." msgid "This field may not be null."
msgstr "" msgstr ""
#: fields.py:599 fields.py:627 #: fields.py:603 fields.py:634
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid boolean." msgid "\"{input}\" is not a valid boolean."
msgstr "" msgstr ""
#: fields.py:662 #: fields.py:669
msgid "This field may not be blank." msgid "This field may not be blank."
msgstr "" msgstr ""
#: fields.py:663 fields.py:1594 #: fields.py:670 fields.py:1656
#, python-brace-format #, python-brace-format
msgid "Ensure this field has no more than {max_length} characters." msgid "Ensure this field has no more than {max_length} characters."
msgstr "" msgstr ""
#: fields.py:664 #: fields.py:671
#, python-brace-format #, python-brace-format
msgid "Ensure this field has at least {min_length} characters." msgid "Ensure this field has at least {min_length} characters."
msgstr "" msgstr ""
#: fields.py:701 #: fields.py:708
msgid "Enter a valid email address." msgid "Enter a valid email address."
msgstr "" msgstr ""
#: fields.py:712 #: fields.py:719
msgid "This value does not match the required pattern." msgid "This value does not match the required pattern."
msgstr "" msgstr ""
#: fields.py:723 #: fields.py:730
msgid "" msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or " "Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens." "hyphens."
msgstr "" msgstr ""
#: fields.py:735 #: fields.py:742
msgid "Enter a valid URL." msgid "Enter a valid URL."
msgstr "" msgstr ""
#: fields.py:748 #: fields.py:755
#, python-brace-format #, python-brace-format
msgid "\"{value}\" is not a valid UUID." msgid "\"{value}\" is not a valid UUID."
msgstr "" msgstr ""
#: fields.py:782 #: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address." msgid "Enter a valid IPv4 or IPv6 address."
msgstr "" msgstr ""
#: fields.py:807 #: fields.py:816
msgid "A valid integer is required." msgid "A valid integer is required."
msgstr "" msgstr ""
#: fields.py:808 fields.py:843 fields.py:876 #: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format #, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}." msgid "Ensure this value is less than or equal to {max_value}."
msgstr "" msgstr ""
#: fields.py:809 fields.py:844 fields.py:877 #: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format #, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}." msgid "Ensure this value is greater than or equal to {min_value}."
msgstr "" msgstr ""
#: fields.py:810 fields.py:845 fields.py:881 #: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large." msgid "String value too large."
msgstr "" msgstr ""
#: fields.py:842 fields.py:875 #: fields.py:851 fields.py:884
msgid "A valid number is required." msgid "A valid number is required."
msgstr "" msgstr ""
#: fields.py:878 #: fields.py:887
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total." msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr "" msgstr ""
#: fields.py:879 #: fields.py:888
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places." "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr "" msgstr ""
#: fields.py:880 #: fields.py:889
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the " "Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point." "decimal point."
msgstr "" msgstr ""
#: fields.py:994 #: fields.py:1004
#, python-brace-format #, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:995 #: fields.py:1005
msgid "Expected a datetime but got a date." msgid "Expected a datetime but got a date."
msgstr "" msgstr ""
#: fields.py:1060 #: fields.py:1079
#, python-brace-format #, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}." msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1061 #: fields.py:1080
msgid "Expected a date but got a datetime." msgid "Expected a date but got a datetime."
msgstr "" msgstr ""
#: fields.py:1125 #: fields.py:1148
#, python-brace-format #, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}." msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1180 #: fields.py:1207
#, python-brace-format #, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}." msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1205 fields.py:1254 #: fields.py:1232 fields.py:1281
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid choice." msgid "\"{input}\" is not a valid choice."
msgstr "" msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427 #: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format #, python-brace-format
msgid "More than {count} items..." msgid "More than {count} items..."
msgstr "" msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504 #: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format #, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"." msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: fields.py:1256 #: fields.py:1283
msgid "This selection may not be empty." msgid "This selection may not be empty."
msgstr "" msgstr ""
#: fields.py:1294 #: fields.py:1320
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid path choice." msgid "\"{input}\" is not a valid path choice."
msgstr "" msgstr ""
#: fields.py:1313 #: fields.py:1339
msgid "No file was submitted." msgid "No file was submitted."
msgstr "" msgstr ""
#: fields.py:1314 #: fields.py:1340
msgid "" msgid ""
"The submitted data was not a file. Check the encoding type on the form." "The submitted data was not a file. Check the encoding type on the form."
msgstr "" msgstr ""
#: fields.py:1315 #: fields.py:1341
msgid "No filename could be determined." msgid "No filename could be determined."
msgstr "" msgstr ""
#: fields.py:1316 #: fields.py:1342
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr ""
#: fields.py:1317 #: fields.py:1343
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})." "Ensure this filename has at most {max_length} characters (it has {length})."
msgstr "" msgstr ""
#: fields.py:1363 #: fields.py:1391
msgid "" msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505 #: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty." msgid "This list may not be empty."
msgstr "" msgstr ""
#: fields.py:1452 #: fields.py:1483
#, python-brace-format #, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"." msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: pagination.py:192 #: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format #, python-brace-format
msgid "Invalid page \"{page_number}\": {message}." msgid "Invalid page \"{page_number}\": {message}."
msgstr "" msgstr ""
#: pagination.py:462 #: pagination.py:407
msgid "Invalid cursor" msgid "Invalid cursor"
msgstr "" msgstr ""
#: relations.py:192 #: relations.py:196
#, python-brace-format #, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist." msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "" msgstr ""
#: relations.py:193 #: relations.py:197
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}." msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr "" msgstr ""
#: relations.py:225 #: relations.py:229
msgid "Invalid hyperlink - No URL match." msgid "Invalid hyperlink - No URL match."
msgstr "" msgstr ""
#: relations.py:226 #: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match." msgid "Invalid hyperlink - Incorrect URL match."
msgstr "" msgstr ""
#: relations.py:227 #: relations.py:231
msgid "Invalid hyperlink - Object does not exist." msgid "Invalid hyperlink - Object does not exist."
msgstr "" msgstr ""
#: relations.py:228 #: relations.py:232
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}." msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "" msgstr ""
#: relations.py:387 #: relations.py:391
#, python-brace-format #, python-brace-format
msgid "Object with {slug_name}={value} does not exist." msgid "Object with {slug_name}={value} does not exist."
msgstr "" msgstr ""
#: relations.py:388 #: relations.py:392
msgid "Invalid value." msgid "Invalid value."
msgstr "" msgstr ""
#: serializers.py:310 #: serializers.py:326
#, python-brace-format #, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}." msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "" msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2 #: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2 #: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2 #: templates/rest_framework/vertical/radio.html:2
......
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Danish (Denmark) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/da_DK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da_DK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:185
msgid "Invalid token."
msgstr ""
#: authtoken/serializers.py:20
msgid "User account is disabled."
msgstr ""
#: authtoken/serializers.py:23
msgid "Unable to log in with provided credentials."
msgstr ""
#: authtoken/serializers.py:26
msgid "Must include \"username\" and \"password\"."
msgstr ""
#: exceptions.py:49
msgid "A server error occurred."
msgstr ""
#: exceptions.py:84
msgid "Malformed request."
msgstr ""
#: exceptions.py:89
msgid "Incorrect authentication credentials."
msgstr ""
#: exceptions.py:94
msgid "Authentication credentials were not provided."
msgstr ""
#: exceptions.py:99
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
#: exceptions.py:120
msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
#: exceptions.py:145
msgid "Request was throttled."
msgstr ""
#: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:889
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty."
msgstr ""
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:326
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2
msgid "None"
msgstr ""
#: templates/rest_framework/horizontal/select_multiple.html:2
#: templates/rest_framework/inline/select_multiple.html:2
#: templates/rest_framework/vertical/select_multiple.html:2
msgid "No items to select."
msgstr ""
#: validators.py:24
msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
#: versioning.py:42
msgid "Invalid version in \"Accept\" header."
msgstr ""
#: versioning.py:73 versioning.py:115
msgid "Invalid version in URL path."
msgstr ""
#: versioning.py:144
msgid "Invalid version in hostname."
msgstr ""
#: versioning.py:166
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:88
msgid "Permission denied."
msgstr ""
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: English (Australia) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/en_AU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_AU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: authentication.py:72
msgid "Invalid basic header. No credentials provided."
msgstr ""
#: authentication.py:75
msgid "Invalid basic header. Credentials string should not contain spaces."
msgstr ""
#: authentication.py:81
msgid "Invalid basic header. Credentials not correctly base64 encoded."
msgstr ""
#: authentication.py:98
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:185
msgid "Invalid token."
msgstr ""
#: authtoken/serializers.py:20
msgid "User account is disabled."
msgstr ""
#: authtoken/serializers.py:23
msgid "Unable to log in with provided credentials."
msgstr ""
#: authtoken/serializers.py:26
msgid "Must include \"username\" and \"password\"."
msgstr ""
#: exceptions.py:49
msgid "A server error occurred."
msgstr ""
#: exceptions.py:84
msgid "Malformed request."
msgstr ""
#: exceptions.py:89
msgid "Incorrect authentication credentials."
msgstr ""
#: exceptions.py:94
msgid "Authentication credentials were not provided."
msgstr ""
#: exceptions.py:99
msgid "You do not have permission to perform this action."
msgstr ""
#: exceptions.py:104 views.py:81
msgid "Not found."
msgstr ""
#: exceptions.py:109
#, python-brace-format
msgid "Method \"{method}\" not allowed."
msgstr ""
#: exceptions.py:120
msgid "Could not satisfy the request Accept header."
msgstr ""
#: exceptions.py:132
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr ""
#: exceptions.py:145
msgid "Request was throttled."
msgstr ""
#: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162
msgid "This field is required."
msgstr ""
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
msgstr ""
#: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
msgstr ""
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:889
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
msgstr ""
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
msgstr ""
#: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
#: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty."
msgstr ""
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:326
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2
msgid "None"
msgstr ""
#: templates/rest_framework/horizontal/select_multiple.html:2
#: templates/rest_framework/inline/select_multiple.html:2
#: templates/rest_framework/vertical/select_multiple.html:2
msgid "No items to select."
msgstr ""
#: validators.py:24
msgid "This field must be unique."
msgstr ""
#: validators.py:78
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
msgstr ""
#: validators.py:226
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
msgstr ""
#: validators.py:241
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
msgstr ""
#: validators.py:254
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
msgstr ""
#: versioning.py:42
msgid "Invalid version in \"Accept\" header."
msgstr ""
#: versioning.py:73 versioning.py:115
msgid "Invalid version in URL path."
msgstr ""
#: versioning.py:144
msgid "Invalid version in hostname."
msgstr ""
#: versioning.py:166
msgid "Invalid version in query parameter."
msgstr ""
#: views.py:88
msgid "Permission denied."
msgstr ""
...@@ -7,8 +7,8 @@ msgid "" ...@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Django REST framework\n" "Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n" "POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n" "PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n" "Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: English (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/en_CA/)\n" "Language-Team: English (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/en_CA/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
...@@ -33,24 +33,24 @@ msgstr "" ...@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password." msgid "Invalid username/password."
msgstr "" msgstr ""
#: authentication.py:101 authentication.py:189 #: authentication.py:101 authentication.py:188
msgid "User inactive or deleted." msgid "User inactive or deleted."
msgstr "" msgstr ""
#: authentication.py:168 #: authentication.py:167
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication.py:171 #: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces." msgid "Invalid token header. Token string should not contain spaces."
msgstr "" msgstr ""
#: authentication.py:177 #: authentication.py:176
msgid "" msgid ""
"Invalid token header. Token string should not contain invalid characters." "Invalid token header. Token string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication.py:186 #: authentication.py:185
msgid "Invalid token." msgid "Invalid token."
msgstr "" msgstr ""
...@@ -108,241 +108,267 @@ msgstr "" ...@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled." msgid "Request was throttled."
msgstr "" msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79 #: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162 #: validators.py:162
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
#: fields.py:263 #: fields.py:267
msgid "This field may not be null." msgid "This field may not be null."
msgstr "" msgstr ""
#: fields.py:599 fields.py:627 #: fields.py:603 fields.py:634
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid boolean." msgid "\"{input}\" is not a valid boolean."
msgstr "" msgstr ""
#: fields.py:662 #: fields.py:669
msgid "This field may not be blank." msgid "This field may not be blank."
msgstr "" msgstr ""
#: fields.py:663 fields.py:1594 #: fields.py:670 fields.py:1656
#, python-brace-format #, python-brace-format
msgid "Ensure this field has no more than {max_length} characters." msgid "Ensure this field has no more than {max_length} characters."
msgstr "" msgstr ""
#: fields.py:664 #: fields.py:671
#, python-brace-format #, python-brace-format
msgid "Ensure this field has at least {min_length} characters." msgid "Ensure this field has at least {min_length} characters."
msgstr "" msgstr ""
#: fields.py:701 #: fields.py:708
msgid "Enter a valid email address." msgid "Enter a valid email address."
msgstr "" msgstr ""
#: fields.py:712 #: fields.py:719
msgid "This value does not match the required pattern." msgid "This value does not match the required pattern."
msgstr "" msgstr ""
#: fields.py:723 #: fields.py:730
msgid "" msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or " "Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens." "hyphens."
msgstr "" msgstr ""
#: fields.py:735 #: fields.py:742
msgid "Enter a valid URL." msgid "Enter a valid URL."
msgstr "" msgstr ""
#: fields.py:748 #: fields.py:755
#, python-brace-format #, python-brace-format
msgid "\"{value}\" is not a valid UUID." msgid "\"{value}\" is not a valid UUID."
msgstr "" msgstr ""
#: fields.py:782 #: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address." msgid "Enter a valid IPv4 or IPv6 address."
msgstr "" msgstr ""
#: fields.py:807 #: fields.py:816
msgid "A valid integer is required." msgid "A valid integer is required."
msgstr "" msgstr ""
#: fields.py:808 fields.py:843 fields.py:876 #: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format #, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}." msgid "Ensure this value is less than or equal to {max_value}."
msgstr "" msgstr ""
#: fields.py:809 fields.py:844 fields.py:877 #: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format #, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}." msgid "Ensure this value is greater than or equal to {min_value}."
msgstr "" msgstr ""
#: fields.py:810 fields.py:845 fields.py:881 #: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large." msgid "String value too large."
msgstr "" msgstr ""
#: fields.py:842 fields.py:875 #: fields.py:851 fields.py:884
msgid "A valid number is required." msgid "A valid number is required."
msgstr "" msgstr ""
#: fields.py:878 #: fields.py:887
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total." msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr "" msgstr ""
#: fields.py:879 #: fields.py:888
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places." "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr "" msgstr ""
#: fields.py:880 #: fields.py:889
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the " "Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point." "decimal point."
msgstr "" msgstr ""
#: fields.py:994 #: fields.py:1004
#, python-brace-format #, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:995 #: fields.py:1005
msgid "Expected a datetime but got a date." msgid "Expected a datetime but got a date."
msgstr "" msgstr ""
#: fields.py:1060 #: fields.py:1079
#, python-brace-format #, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}." msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1061 #: fields.py:1080
msgid "Expected a date but got a datetime." msgid "Expected a date but got a datetime."
msgstr "" msgstr ""
#: fields.py:1125 #: fields.py:1148
#, python-brace-format #, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}." msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1180 #: fields.py:1207
#, python-brace-format #, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}." msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1205 fields.py:1254 #: fields.py:1232 fields.py:1281
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid choice." msgid "\"{input}\" is not a valid choice."
msgstr "" msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427 #: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format #, python-brace-format
msgid "More than {count} items..." msgid "More than {count} items..."
msgstr "" msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504 #: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format #, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"." msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: fields.py:1256 #: fields.py:1283
msgid "This selection may not be empty." msgid "This selection may not be empty."
msgstr "" msgstr ""
#: fields.py:1294 #: fields.py:1320
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid path choice." msgid "\"{input}\" is not a valid path choice."
msgstr "" msgstr ""
#: fields.py:1313 #: fields.py:1339
msgid "No file was submitted." msgid "No file was submitted."
msgstr "" msgstr ""
#: fields.py:1314 #: fields.py:1340
msgid "" msgid ""
"The submitted data was not a file. Check the encoding type on the form." "The submitted data was not a file. Check the encoding type on the form."
msgstr "" msgstr ""
#: fields.py:1315 #: fields.py:1341
msgid "No filename could be determined." msgid "No filename could be determined."
msgstr "" msgstr ""
#: fields.py:1316 #: fields.py:1342
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr ""
#: fields.py:1317 #: fields.py:1343
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})." "Ensure this filename has at most {max_length} characters (it has {length})."
msgstr "" msgstr ""
#: fields.py:1363 #: fields.py:1391
msgid "" msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505 #: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty." msgid "This list may not be empty."
msgstr "" msgstr ""
#: fields.py:1452 #: fields.py:1483
#, python-brace-format #, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"." msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: pagination.py:192 #: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format #, python-brace-format
msgid "Invalid page \"{page_number}\": {message}." msgid "Invalid page \"{page_number}\": {message}."
msgstr "" msgstr ""
#: pagination.py:462 #: pagination.py:407
msgid "Invalid cursor" msgid "Invalid cursor"
msgstr "" msgstr ""
#: relations.py:192 #: relations.py:196
#, python-brace-format #, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist." msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "" msgstr ""
#: relations.py:193 #: relations.py:197
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}." msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr "" msgstr ""
#: relations.py:225 #: relations.py:229
msgid "Invalid hyperlink - No URL match." msgid "Invalid hyperlink - No URL match."
msgstr "" msgstr ""
#: relations.py:226 #: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match." msgid "Invalid hyperlink - Incorrect URL match."
msgstr "" msgstr ""
#: relations.py:227 #: relations.py:231
msgid "Invalid hyperlink - Object does not exist." msgid "Invalid hyperlink - Object does not exist."
msgstr "" msgstr ""
#: relations.py:228 #: relations.py:232
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}." msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "" msgstr ""
#: relations.py:387 #: relations.py:391
#, python-brace-format #, python-brace-format
msgid "Object with {slug_name}={value} does not exist." msgid "Object with {slug_name}={value} does not exist."
msgstr "" msgstr ""
#: relations.py:388 #: relations.py:392
msgid "Invalid value." msgid "Invalid value."
msgstr "" msgstr ""
#: serializers.py:310 #: serializers.py:326
#, python-brace-format #, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}." msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "" msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2 #: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2 #: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2 #: templates/rest_framework/vertical/radio.html:2
......
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n" "POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -33,24 +33,24 @@ msgstr "" ...@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password." msgid "Invalid username/password."
msgstr "" msgstr ""
#: authentication.py:101 authentication.py:189 #: authentication.py:101 authentication.py:188
msgid "User inactive or deleted." msgid "User inactive or deleted."
msgstr "" msgstr ""
#: authentication.py:168 #: authentication.py:167
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication.py:171 #: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces." msgid "Invalid token header. Token string should not contain spaces."
msgstr "" msgstr ""
#: authentication.py:177 #: authentication.py:176
msgid "" msgid ""
"Invalid token header. Token string should not contain invalid characters." "Invalid token header. Token string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication.py:186 #: authentication.py:185
msgid "Invalid token." msgid "Invalid token."
msgstr "" msgstr ""
...@@ -108,239 +108,265 @@ msgstr "" ...@@ -108,239 +108,265 @@ msgstr ""
msgid "Request was throttled." msgid "Request was throttled."
msgstr "" msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79 #: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162 #: validators.py:162
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
#: fields.py:263 #: fields.py:267
msgid "This field may not be null." msgid "This field may not be null."
msgstr "" msgstr ""
#: fields.py:599 fields.py:627 #: fields.py:603 fields.py:634
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid boolean." msgid "\"{input}\" is not a valid boolean."
msgstr "" msgstr ""
#: fields.py:662 #: fields.py:669
msgid "This field may not be blank." msgid "This field may not be blank."
msgstr "" msgstr ""
#: fields.py:663 fields.py:1594 #: fields.py:670 fields.py:1656
#, python-brace-format #, python-brace-format
msgid "Ensure this field has no more than {max_length} characters." msgid "Ensure this field has no more than {max_length} characters."
msgstr "" msgstr ""
#: fields.py:664 #: fields.py:671
#, python-brace-format #, python-brace-format
msgid "Ensure this field has at least {min_length} characters." msgid "Ensure this field has at least {min_length} characters."
msgstr "" msgstr ""
#: fields.py:701 #: fields.py:708
msgid "Enter a valid email address." msgid "Enter a valid email address."
msgstr "" msgstr ""
#: fields.py:712 #: fields.py:719
msgid "This value does not match the required pattern." msgid "This value does not match the required pattern."
msgstr "" msgstr ""
#: fields.py:723 #: fields.py:730
msgid "" msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or " "Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens." "hyphens."
msgstr "" msgstr ""
#: fields.py:735 #: fields.py:742
msgid "Enter a valid URL." msgid "Enter a valid URL."
msgstr "" msgstr ""
#: fields.py:748 #: fields.py:755
#, python-brace-format #, python-brace-format
msgid "\"{value}\" is not a valid UUID." msgid "\"{value}\" is not a valid UUID."
msgstr "" msgstr ""
#: fields.py:782 #: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address." msgid "Enter a valid IPv4 or IPv6 address."
msgstr "" msgstr ""
#: fields.py:807 #: fields.py:816
msgid "A valid integer is required." msgid "A valid integer is required."
msgstr "" msgstr ""
#: fields.py:808 fields.py:843 fields.py:876 #: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format #, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}." msgid "Ensure this value is less than or equal to {max_value}."
msgstr "" msgstr ""
#: fields.py:809 fields.py:844 fields.py:877 #: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format #, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}." msgid "Ensure this value is greater than or equal to {min_value}."
msgstr "" msgstr ""
#: fields.py:810 fields.py:845 fields.py:881 #: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large." msgid "String value too large."
msgstr "" msgstr ""
#: fields.py:842 fields.py:875 #: fields.py:851 fields.py:884
msgid "A valid number is required." msgid "A valid number is required."
msgstr "" msgstr ""
#: fields.py:878 #: fields.py:887
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total." msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr "" msgstr ""
#: fields.py:879 #: fields.py:888
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_decimal_places} decimal places." msgid "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr "" msgstr ""
#: fields.py:880 #: fields.py:889
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the " "Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point." "decimal point."
msgstr "" msgstr ""
#: fields.py:994 #: fields.py:1004
#, python-brace-format #, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:995 #: fields.py:1005
msgid "Expected a datetime but got a date." msgid "Expected a datetime but got a date."
msgstr "" msgstr ""
#: fields.py:1060 #: fields.py:1079
#, python-brace-format #, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}." msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1061 #: fields.py:1080
msgid "Expected a date but got a datetime." msgid "Expected a date but got a datetime."
msgstr "" msgstr ""
#: fields.py:1125 #: fields.py:1148
#, python-brace-format #, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}." msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1180 #: fields.py:1207
#, python-brace-format #, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}." msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1205 fields.py:1254 #: fields.py:1232 fields.py:1281
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid choice." msgid "\"{input}\" is not a valid choice."
msgstr "" msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427 #: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format #, python-brace-format
msgid "More than {count} items..." msgid "More than {count} items..."
msgstr "" msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504 #: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format #, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"." msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: fields.py:1256 #: fields.py:1283
msgid "This selection may not be empty." msgid "This selection may not be empty."
msgstr "" msgstr ""
#: fields.py:1294 #: fields.py:1320
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid path choice." msgid "\"{input}\" is not a valid path choice."
msgstr "" msgstr ""
#: fields.py:1313 #: fields.py:1339
msgid "No file was submitted." msgid "No file was submitted."
msgstr "" msgstr ""
#: fields.py:1314 #: fields.py:1340
msgid "The submitted data was not a file. Check the encoding type on the form." msgid "The submitted data was not a file. Check the encoding type on the form."
msgstr "" msgstr ""
#: fields.py:1315 #: fields.py:1341
msgid "No filename could be determined." msgid "No filename could be determined."
msgstr "" msgstr ""
#: fields.py:1316 #: fields.py:1342
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr ""
#: fields.py:1317 #: fields.py:1343
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})." "Ensure this filename has at most {max_length} characters (it has {length})."
msgstr "" msgstr ""
#: fields.py:1363 #: fields.py:1391
msgid "" msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505 #: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty." msgid "This list may not be empty."
msgstr "" msgstr ""
#: fields.py:1452 #: fields.py:1483
#, python-brace-format #, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"." msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: pagination.py:192 #: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format #, python-brace-format
msgid "Invalid page \"{page_number}\": {message}." msgid "Invalid page \"{page_number}\": {message}."
msgstr "" msgstr ""
#: pagination.py:462 #: pagination.py:407
msgid "Invalid cursor" msgid "Invalid cursor"
msgstr "" msgstr ""
#: relations.py:192 #: relations.py:196
#, python-brace-format #, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist." msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "" msgstr ""
#: relations.py:193 #: relations.py:197
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}." msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr "" msgstr ""
#: relations.py:225 #: relations.py:229
msgid "Invalid hyperlink - No URL match." msgid "Invalid hyperlink - No URL match."
msgstr "" msgstr ""
#: relations.py:226 #: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match." msgid "Invalid hyperlink - Incorrect URL match."
msgstr "" msgstr ""
#: relations.py:227 #: relations.py:231
msgid "Invalid hyperlink - Object does not exist." msgid "Invalid hyperlink - Object does not exist."
msgstr "" msgstr ""
#: relations.py:228 #: relations.py:232
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}." msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "" msgstr ""
#: relations.py:387 #: relations.py:391
#, python-brace-format #, python-brace-format
msgid "Object with {slug_name}={value} does not exist." msgid "Object with {slug_name}={value} does not exist."
msgstr "" msgstr ""
#: relations.py:388 #: relations.py:392
msgid "Invalid value." msgid "Invalid value."
msgstr "" msgstr ""
#: serializers.py:310 #: serializers.py:326
#, python-brace-format #, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}." msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "" msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2 #: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2 #: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2 #: templates/rest_framework/vertical/radio.html:2
......
...@@ -7,8 +7,8 @@ msgid "" ...@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Django REST framework\n" "Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n" "POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n" "PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n" "Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: French (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fr_CA/)\n" "Language-Team: French (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fr_CA/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
...@@ -33,24 +33,24 @@ msgstr "" ...@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password." msgid "Invalid username/password."
msgstr "" msgstr ""
#: authentication.py:101 authentication.py:189 #: authentication.py:101 authentication.py:188
msgid "User inactive or deleted." msgid "User inactive or deleted."
msgstr "" msgstr ""
#: authentication.py:168 #: authentication.py:167
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication.py:171 #: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces." msgid "Invalid token header. Token string should not contain spaces."
msgstr "" msgstr ""
#: authentication.py:177 #: authentication.py:176
msgid "" msgid ""
"Invalid token header. Token string should not contain invalid characters." "Invalid token header. Token string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication.py:186 #: authentication.py:185
msgid "Invalid token." msgid "Invalid token."
msgstr "" msgstr ""
...@@ -108,241 +108,267 @@ msgstr "" ...@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled." msgid "Request was throttled."
msgstr "" msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79 #: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162 #: validators.py:162
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
#: fields.py:263 #: fields.py:267
msgid "This field may not be null." msgid "This field may not be null."
msgstr "" msgstr ""
#: fields.py:599 fields.py:627 #: fields.py:603 fields.py:634
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid boolean." msgid "\"{input}\" is not a valid boolean."
msgstr "" msgstr ""
#: fields.py:662 #: fields.py:669
msgid "This field may not be blank." msgid "This field may not be blank."
msgstr "" msgstr ""
#: fields.py:663 fields.py:1594 #: fields.py:670 fields.py:1656
#, python-brace-format #, python-brace-format
msgid "Ensure this field has no more than {max_length} characters." msgid "Ensure this field has no more than {max_length} characters."
msgstr "" msgstr ""
#: fields.py:664 #: fields.py:671
#, python-brace-format #, python-brace-format
msgid "Ensure this field has at least {min_length} characters." msgid "Ensure this field has at least {min_length} characters."
msgstr "" msgstr ""
#: fields.py:701 #: fields.py:708
msgid "Enter a valid email address." msgid "Enter a valid email address."
msgstr "" msgstr ""
#: fields.py:712 #: fields.py:719
msgid "This value does not match the required pattern." msgid "This value does not match the required pattern."
msgstr "" msgstr ""
#: fields.py:723 #: fields.py:730
msgid "" msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or " "Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens." "hyphens."
msgstr "" msgstr ""
#: fields.py:735 #: fields.py:742
msgid "Enter a valid URL." msgid "Enter a valid URL."
msgstr "" msgstr ""
#: fields.py:748 #: fields.py:755
#, python-brace-format #, python-brace-format
msgid "\"{value}\" is not a valid UUID." msgid "\"{value}\" is not a valid UUID."
msgstr "" msgstr ""
#: fields.py:782 #: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address." msgid "Enter a valid IPv4 or IPv6 address."
msgstr "" msgstr ""
#: fields.py:807 #: fields.py:816
msgid "A valid integer is required." msgid "A valid integer is required."
msgstr "" msgstr ""
#: fields.py:808 fields.py:843 fields.py:876 #: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format #, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}." msgid "Ensure this value is less than or equal to {max_value}."
msgstr "" msgstr ""
#: fields.py:809 fields.py:844 fields.py:877 #: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format #, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}." msgid "Ensure this value is greater than or equal to {min_value}."
msgstr "" msgstr ""
#: fields.py:810 fields.py:845 fields.py:881 #: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large." msgid "String value too large."
msgstr "" msgstr ""
#: fields.py:842 fields.py:875 #: fields.py:851 fields.py:884
msgid "A valid number is required." msgid "A valid number is required."
msgstr "" msgstr ""
#: fields.py:878 #: fields.py:887
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total." msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr "" msgstr ""
#: fields.py:879 #: fields.py:888
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places." "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr "" msgstr ""
#: fields.py:880 #: fields.py:889
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the " "Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point." "decimal point."
msgstr "" msgstr ""
#: fields.py:994 #: fields.py:1004
#, python-brace-format #, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:995 #: fields.py:1005
msgid "Expected a datetime but got a date." msgid "Expected a datetime but got a date."
msgstr "" msgstr ""
#: fields.py:1060 #: fields.py:1079
#, python-brace-format #, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}." msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1061 #: fields.py:1080
msgid "Expected a date but got a datetime." msgid "Expected a date but got a datetime."
msgstr "" msgstr ""
#: fields.py:1125 #: fields.py:1148
#, python-brace-format #, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}." msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1180 #: fields.py:1207
#, python-brace-format #, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}." msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1205 fields.py:1254 #: fields.py:1232 fields.py:1281
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid choice." msgid "\"{input}\" is not a valid choice."
msgstr "" msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427 #: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format #, python-brace-format
msgid "More than {count} items..." msgid "More than {count} items..."
msgstr "" msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504 #: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format #, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"." msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: fields.py:1256 #: fields.py:1283
msgid "This selection may not be empty." msgid "This selection may not be empty."
msgstr "" msgstr ""
#: fields.py:1294 #: fields.py:1320
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid path choice." msgid "\"{input}\" is not a valid path choice."
msgstr "" msgstr ""
#: fields.py:1313 #: fields.py:1339
msgid "No file was submitted." msgid "No file was submitted."
msgstr "" msgstr ""
#: fields.py:1314 #: fields.py:1340
msgid "" msgid ""
"The submitted data was not a file. Check the encoding type on the form." "The submitted data was not a file. Check the encoding type on the form."
msgstr "" msgstr ""
#: fields.py:1315 #: fields.py:1341
msgid "No filename could be determined." msgid "No filename could be determined."
msgstr "" msgstr ""
#: fields.py:1316 #: fields.py:1342
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr ""
#: fields.py:1317 #: fields.py:1343
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})." "Ensure this filename has at most {max_length} characters (it has {length})."
msgstr "" msgstr ""
#: fields.py:1363 #: fields.py:1391
msgid "" msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505 #: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty." msgid "This list may not be empty."
msgstr "" msgstr ""
#: fields.py:1452 #: fields.py:1483
#, python-brace-format #, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"." msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: pagination.py:192 #: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format #, python-brace-format
msgid "Invalid page \"{page_number}\": {message}." msgid "Invalid page \"{page_number}\": {message}."
msgstr "" msgstr ""
#: pagination.py:462 #: pagination.py:407
msgid "Invalid cursor" msgid "Invalid cursor"
msgstr "" msgstr ""
#: relations.py:192 #: relations.py:196
#, python-brace-format #, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist." msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "" msgstr ""
#: relations.py:193 #: relations.py:197
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}." msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr "" msgstr ""
#: relations.py:225 #: relations.py:229
msgid "Invalid hyperlink - No URL match." msgid "Invalid hyperlink - No URL match."
msgstr "" msgstr ""
#: relations.py:226 #: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match." msgid "Invalid hyperlink - Incorrect URL match."
msgstr "" msgstr ""
#: relations.py:227 #: relations.py:231
msgid "Invalid hyperlink - Object does not exist." msgid "Invalid hyperlink - Object does not exist."
msgstr "" msgstr ""
#: relations.py:228 #: relations.py:232
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}." msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "" msgstr ""
#: relations.py:387 #: relations.py:391
#, python-brace-format #, python-brace-format
msgid "Object with {slug_name}={value} does not exist." msgid "Object with {slug_name}={value} does not exist."
msgstr "" msgstr ""
#: relations.py:388 #: relations.py:392
msgid "Invalid value." msgid "Invalid value."
msgstr "" msgstr ""
#: serializers.py:310 #: serializers.py:326
#, python-brace-format #, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}." msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "" msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2 #: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2 #: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2 #: templates/rest_framework/vertical/radio.html:2
......
...@@ -7,8 +7,8 @@ msgid "" ...@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Django REST framework\n" "Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n" "POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n" "PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n" "Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Galician (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl/)\n" "Language-Team: Galician (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
...@@ -33,24 +33,24 @@ msgstr "" ...@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password." msgid "Invalid username/password."
msgstr "" msgstr ""
#: authentication.py:101 authentication.py:189 #: authentication.py:101 authentication.py:188
msgid "User inactive or deleted." msgid "User inactive or deleted."
msgstr "" msgstr ""
#: authentication.py:168 #: authentication.py:167
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication.py:171 #: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces." msgid "Invalid token header. Token string should not contain spaces."
msgstr "" msgstr ""
#: authentication.py:177 #: authentication.py:176
msgid "" msgid ""
"Invalid token header. Token string should not contain invalid characters." "Invalid token header. Token string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication.py:186 #: authentication.py:185
msgid "Invalid token." msgid "Invalid token."
msgstr "" msgstr ""
...@@ -108,241 +108,267 @@ msgstr "" ...@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled." msgid "Request was throttled."
msgstr "" msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79 #: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162 #: validators.py:162
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
#: fields.py:263 #: fields.py:267
msgid "This field may not be null." msgid "This field may not be null."
msgstr "" msgstr ""
#: fields.py:599 fields.py:627 #: fields.py:603 fields.py:634
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid boolean." msgid "\"{input}\" is not a valid boolean."
msgstr "" msgstr ""
#: fields.py:662 #: fields.py:669
msgid "This field may not be blank." msgid "This field may not be blank."
msgstr "" msgstr ""
#: fields.py:663 fields.py:1594 #: fields.py:670 fields.py:1656
#, python-brace-format #, python-brace-format
msgid "Ensure this field has no more than {max_length} characters." msgid "Ensure this field has no more than {max_length} characters."
msgstr "" msgstr ""
#: fields.py:664 #: fields.py:671
#, python-brace-format #, python-brace-format
msgid "Ensure this field has at least {min_length} characters." msgid "Ensure this field has at least {min_length} characters."
msgstr "" msgstr ""
#: fields.py:701 #: fields.py:708
msgid "Enter a valid email address." msgid "Enter a valid email address."
msgstr "" msgstr ""
#: fields.py:712 #: fields.py:719
msgid "This value does not match the required pattern." msgid "This value does not match the required pattern."
msgstr "" msgstr ""
#: fields.py:723 #: fields.py:730
msgid "" msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or " "Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens." "hyphens."
msgstr "" msgstr ""
#: fields.py:735 #: fields.py:742
msgid "Enter a valid URL." msgid "Enter a valid URL."
msgstr "" msgstr ""
#: fields.py:748 #: fields.py:755
#, python-brace-format #, python-brace-format
msgid "\"{value}\" is not a valid UUID." msgid "\"{value}\" is not a valid UUID."
msgstr "" msgstr ""
#: fields.py:782 #: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address." msgid "Enter a valid IPv4 or IPv6 address."
msgstr "" msgstr ""
#: fields.py:807 #: fields.py:816
msgid "A valid integer is required." msgid "A valid integer is required."
msgstr "" msgstr ""
#: fields.py:808 fields.py:843 fields.py:876 #: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format #, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}." msgid "Ensure this value is less than or equal to {max_value}."
msgstr "" msgstr ""
#: fields.py:809 fields.py:844 fields.py:877 #: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format #, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}." msgid "Ensure this value is greater than or equal to {min_value}."
msgstr "" msgstr ""
#: fields.py:810 fields.py:845 fields.py:881 #: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large." msgid "String value too large."
msgstr "" msgstr ""
#: fields.py:842 fields.py:875 #: fields.py:851 fields.py:884
msgid "A valid number is required." msgid "A valid number is required."
msgstr "" msgstr ""
#: fields.py:878 #: fields.py:887
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total." msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr "" msgstr ""
#: fields.py:879 #: fields.py:888
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places." "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr "" msgstr ""
#: fields.py:880 #: fields.py:889
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the " "Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point." "decimal point."
msgstr "" msgstr ""
#: fields.py:994 #: fields.py:1004
#, python-brace-format #, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:995 #: fields.py:1005
msgid "Expected a datetime but got a date." msgid "Expected a datetime but got a date."
msgstr "" msgstr ""
#: fields.py:1060 #: fields.py:1079
#, python-brace-format #, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}." msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1061 #: fields.py:1080
msgid "Expected a date but got a datetime." msgid "Expected a date but got a datetime."
msgstr "" msgstr ""
#: fields.py:1125 #: fields.py:1148
#, python-brace-format #, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}." msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1180 #: fields.py:1207
#, python-brace-format #, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}." msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1205 fields.py:1254 #: fields.py:1232 fields.py:1281
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid choice." msgid "\"{input}\" is not a valid choice."
msgstr "" msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427 #: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format #, python-brace-format
msgid "More than {count} items..." msgid "More than {count} items..."
msgstr "" msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504 #: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format #, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"." msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: fields.py:1256 #: fields.py:1283
msgid "This selection may not be empty." msgid "This selection may not be empty."
msgstr "" msgstr ""
#: fields.py:1294 #: fields.py:1320
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid path choice." msgid "\"{input}\" is not a valid path choice."
msgstr "" msgstr ""
#: fields.py:1313 #: fields.py:1339
msgid "No file was submitted." msgid "No file was submitted."
msgstr "" msgstr ""
#: fields.py:1314 #: fields.py:1340
msgid "" msgid ""
"The submitted data was not a file. Check the encoding type on the form." "The submitted data was not a file. Check the encoding type on the form."
msgstr "" msgstr ""
#: fields.py:1315 #: fields.py:1341
msgid "No filename could be determined." msgid "No filename could be determined."
msgstr "" msgstr ""
#: fields.py:1316 #: fields.py:1342
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr ""
#: fields.py:1317 #: fields.py:1343
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})." "Ensure this filename has at most {max_length} characters (it has {length})."
msgstr "" msgstr ""
#: fields.py:1363 #: fields.py:1391
msgid "" msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505 #: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty." msgid "This list may not be empty."
msgstr "" msgstr ""
#: fields.py:1452 #: fields.py:1483
#, python-brace-format #, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"." msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: pagination.py:192 #: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format #, python-brace-format
msgid "Invalid page \"{page_number}\": {message}." msgid "Invalid page \"{page_number}\": {message}."
msgstr "" msgstr ""
#: pagination.py:462 #: pagination.py:407
msgid "Invalid cursor" msgid "Invalid cursor"
msgstr "" msgstr ""
#: relations.py:192 #: relations.py:196
#, python-brace-format #, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist." msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "" msgstr ""
#: relations.py:193 #: relations.py:197
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}." msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr "" msgstr ""
#: relations.py:225 #: relations.py:229
msgid "Invalid hyperlink - No URL match." msgid "Invalid hyperlink - No URL match."
msgstr "" msgstr ""
#: relations.py:226 #: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match." msgid "Invalid hyperlink - Incorrect URL match."
msgstr "" msgstr ""
#: relations.py:227 #: relations.py:231
msgid "Invalid hyperlink - Object does not exist." msgid "Invalid hyperlink - Object does not exist."
msgstr "" msgstr ""
#: relations.py:228 #: relations.py:232
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}." msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "" msgstr ""
#: relations.py:387 #: relations.py:391
#, python-brace-format #, python-brace-format
msgid "Object with {slug_name}={value} does not exist." msgid "Object with {slug_name}={value} does not exist."
msgstr "" msgstr ""
#: relations.py:388 #: relations.py:392
msgid "Invalid value." msgid "Invalid value."
msgstr "" msgstr ""
#: serializers.py:310 #: serializers.py:326
#, python-brace-format #, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}." msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "" msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2 #: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2 #: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2 #: templates/rest_framework/vertical/radio.html:2
......
...@@ -8,8 +8,8 @@ msgid "" ...@@ -8,8 +8,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Django REST framework\n" "Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n" "POT-Creation-Date: 2015-12-07 18:53+0100\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\n" "PO-Revision-Date: 2015-12-07 17:55+0000\n"
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n" "Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
"Language-Team: Galician (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl_ES/)\n" "Language-Team: Galician (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl_ES/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
...@@ -34,24 +34,24 @@ msgstr "" ...@@ -34,24 +34,24 @@ msgstr ""
msgid "Invalid username/password." msgid "Invalid username/password."
msgstr "" msgstr ""
#: authentication.py:101 authentication.py:189 #: authentication.py:101 authentication.py:188
msgid "User inactive or deleted." msgid "User inactive or deleted."
msgstr "" msgstr ""
#: authentication.py:168 #: authentication.py:167
msgid "Invalid token header. No credentials provided." msgid "Invalid token header. No credentials provided."
msgstr "" msgstr ""
#: authentication.py:171 #: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces." msgid "Invalid token header. Token string should not contain spaces."
msgstr "" msgstr ""
#: authentication.py:177 #: authentication.py:176
msgid "" msgid ""
"Invalid token header. Token string should not contain invalid characters." "Invalid token header. Token string should not contain invalid characters."
msgstr "" msgstr ""
#: authentication.py:186 #: authentication.py:185
msgid "Invalid token." msgid "Invalid token."
msgstr "" msgstr ""
...@@ -109,241 +109,267 @@ msgstr "" ...@@ -109,241 +109,267 @@ msgstr ""
msgid "Request was throttled." msgid "Request was throttled."
msgstr "" msgstr ""
#: fields.py:262 relations.py:191 relations.py:224 validators.py:79 #: fields.py:266 relations.py:195 relations.py:228 validators.py:79
#: validators.py:162 #: validators.py:162
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
#: fields.py:263 #: fields.py:267
msgid "This field may not be null." msgid "This field may not be null."
msgstr "" msgstr ""
#: fields.py:599 fields.py:627 #: fields.py:603 fields.py:634
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid boolean." msgid "\"{input}\" is not a valid boolean."
msgstr "" msgstr ""
#: fields.py:662 #: fields.py:669
msgid "This field may not be blank." msgid "This field may not be blank."
msgstr "" msgstr ""
#: fields.py:663 fields.py:1594 #: fields.py:670 fields.py:1656
#, python-brace-format #, python-brace-format
msgid "Ensure this field has no more than {max_length} characters." msgid "Ensure this field has no more than {max_length} characters."
msgstr "" msgstr ""
#: fields.py:664 #: fields.py:671
#, python-brace-format #, python-brace-format
msgid "Ensure this field has at least {min_length} characters." msgid "Ensure this field has at least {min_length} characters."
msgstr "" msgstr ""
#: fields.py:701 #: fields.py:708
msgid "Enter a valid email address." msgid "Enter a valid email address."
msgstr "" msgstr ""
#: fields.py:712 #: fields.py:719
msgid "This value does not match the required pattern." msgid "This value does not match the required pattern."
msgstr "" msgstr ""
#: fields.py:723 #: fields.py:730
msgid "" msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or " "Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens." "hyphens."
msgstr "" msgstr ""
#: fields.py:735 #: fields.py:742
msgid "Enter a valid URL." msgid "Enter a valid URL."
msgstr "" msgstr ""
#: fields.py:748 #: fields.py:755
#, python-brace-format #, python-brace-format
msgid "\"{value}\" is not a valid UUID." msgid "\"{value}\" is not a valid UUID."
msgstr "" msgstr ""
#: fields.py:782 #: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address." msgid "Enter a valid IPv4 or IPv6 address."
msgstr "" msgstr ""
#: fields.py:807 #: fields.py:816
msgid "A valid integer is required." msgid "A valid integer is required."
msgstr "" msgstr ""
#: fields.py:808 fields.py:843 fields.py:876 #: fields.py:817 fields.py:852 fields.py:885
#, python-brace-format #, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}." msgid "Ensure this value is less than or equal to {max_value}."
msgstr "" msgstr ""
#: fields.py:809 fields.py:844 fields.py:877 #: fields.py:818 fields.py:853 fields.py:886
#, python-brace-format #, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}." msgid "Ensure this value is greater than or equal to {min_value}."
msgstr "" msgstr ""
#: fields.py:810 fields.py:845 fields.py:881 #: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large." msgid "String value too large."
msgstr "" msgstr ""
#: fields.py:842 fields.py:875 #: fields.py:851 fields.py:884
msgid "A valid number is required." msgid "A valid number is required."
msgstr "" msgstr ""
#: fields.py:878 #: fields.py:887
#, python-brace-format #, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total." msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr "" msgstr ""
#: fields.py:879 #: fields.py:888
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places." "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr "" msgstr ""
#: fields.py:880 #: fields.py:889
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the " "Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point." "decimal point."
msgstr "" msgstr ""
#: fields.py:994 #: fields.py:1004
#, python-brace-format #, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:995 #: fields.py:1005
msgid "Expected a datetime but got a date." msgid "Expected a datetime but got a date."
msgstr "" msgstr ""
#: fields.py:1060 #: fields.py:1079
#, python-brace-format #, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}." msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1061 #: fields.py:1080
msgid "Expected a date but got a datetime." msgid "Expected a date but got a datetime."
msgstr "" msgstr ""
#: fields.py:1125 #: fields.py:1148
#, python-brace-format #, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}." msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1180 #: fields.py:1207
#, python-brace-format #, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}." msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "" msgstr ""
#: fields.py:1205 fields.py:1254 #: fields.py:1232 fields.py:1281
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid choice." msgid "\"{input}\" is not a valid choice."
msgstr "" msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427 #: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format #, python-brace-format
msgid "More than {count} items..." msgid "More than {count} items..."
msgstr "" msgstr ""
#: fields.py:1255 fields.py:1401 relations.py:423 serializers.py:504 #: fields.py:1282 fields.py:1429 relations.py:427 serializers.py:520
#, python-brace-format #, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"." msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: fields.py:1256 #: fields.py:1283
msgid "This selection may not be empty." msgid "This selection may not be empty."
msgstr "" msgstr ""
#: fields.py:1294 #: fields.py:1320
#, python-brace-format #, python-brace-format
msgid "\"{input}\" is not a valid path choice." msgid "\"{input}\" is not a valid path choice."
msgstr "" msgstr ""
#: fields.py:1313 #: fields.py:1339
msgid "No file was submitted." msgid "No file was submitted."
msgstr "" msgstr ""
#: fields.py:1314 #: fields.py:1340
msgid "" msgid ""
"The submitted data was not a file. Check the encoding type on the form." "The submitted data was not a file. Check the encoding type on the form."
msgstr "" msgstr ""
#: fields.py:1315 #: fields.py:1341
msgid "No filename could be determined." msgid "No filename could be determined."
msgstr "" msgstr ""
#: fields.py:1316 #: fields.py:1342
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr ""
#: fields.py:1317 #: fields.py:1343
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})." "Ensure this filename has at most {max_length} characters (it has {length})."
msgstr "" msgstr ""
#: fields.py:1363 #: fields.py:1391
msgid "" msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
#: fields.py:1402 relations.py:424 serializers.py:505 #: fields.py:1430 relations.py:428 serializers.py:521
msgid "This list may not be empty." msgid "This list may not be empty."
msgstr "" msgstr ""
#: fields.py:1452 #: fields.py:1483
#, python-brace-format #, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"." msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "" msgstr ""
#: pagination.py:192 #: fields.py:1530
msgid "Value must be valid JSON."
msgstr ""
#: filters.py:35 templates/rest_framework/filters/django_filter.html:5
msgid "Submit"
msgstr ""
#: pagination.py:189
#, python-brace-format #, python-brace-format
msgid "Invalid page \"{page_number}\": {message}." msgid "Invalid page \"{page_number}\": {message}."
msgstr "" msgstr ""
#: pagination.py:462 #: pagination.py:407
msgid "Invalid cursor" msgid "Invalid cursor"
msgstr "" msgstr ""
#: relations.py:192 #: relations.py:196
#, python-brace-format #, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist." msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "" msgstr ""
#: relations.py:193 #: relations.py:197
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}." msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr "" msgstr ""
#: relations.py:225 #: relations.py:229
msgid "Invalid hyperlink - No URL match." msgid "Invalid hyperlink - No URL match."
msgstr "" msgstr ""
#: relations.py:226 #: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match." msgid "Invalid hyperlink - Incorrect URL match."
msgstr "" msgstr ""
#: relations.py:227 #: relations.py:231
msgid "Invalid hyperlink - Object does not exist." msgid "Invalid hyperlink - Object does not exist."
msgstr "" msgstr ""
#: relations.py:228 #: relations.py:232
#, python-brace-format #, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}." msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "" msgstr ""
#: relations.py:387 #: relations.py:391
#, python-brace-format #, python-brace-format
msgid "Object with {slug_name}={value} does not exist." msgid "Object with {slug_name}={value} does not exist."
msgstr "" msgstr ""
#: relations.py:388 #: relations.py:392
msgid "Invalid value." msgid "Invalid value."
msgstr "Valor non válido." msgstr "Valor non válido."
#: serializers.py:310 #: serializers.py:326
#, python-brace-format #, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}." msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "" msgstr ""
#: templates/rest_framework/admin.html:118
#: templates/rest_framework/base.html:128
msgid "Filters"
msgstr ""
#: templates/rest_framework/filters/django_filter.html:2
#: templates/rest_framework/filters/django_filter_crispyforms.html:4
msgid "Field filters"
msgstr ""
#: templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr ""
#: templates/rest_framework/filters/search.html:2
msgid "Search"
msgstr ""
#: templates/rest_framework/horizontal/radio.html:2 #: templates/rest_framework/horizontal/radio.html:2
#: templates/rest_framework/inline/radio.html:2 #: templates/rest_framework/inline/radio.html:2
#: templates/rest_framework/vertical/radio.html:2 #: templates/rest_framework/vertical/radio.html:2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment