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 @@
skip=.tox
atomic=true
multi_line_output=5
known_standard_library=types
known_third_party=pytest,django
known_first_party=rest_framework
[main]
host = https://www.transifex.com
lang_map = sr@latin:sr_Latn, zh-Hans:zh_Hans, zh-Hant:zh_Hant
[django-rest-framework.djangopo]
file_filter = rest_framework/locale/<lang>/LC_MESSAGES/django.po
......
# License
Copyright (c) 2011-2015, Tom Christie
Copyright (c) 2011-2016, Tom Christie
All rights reserved.
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.
#### 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.
from django.conf import settings
......@@ -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():
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:
from rest_framework.authtoken import views
......@@ -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.
##### 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
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`.
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
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)
......@@ -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 generics
class ProductFilter(django_filters.FilterSet):
class ProductFilter(filters.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta:
......@@ -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
filters using `Manufacturer` name. For example:
import django_filters
from myapp.models import Product
from myapp.serializers import ProductSerializer
from rest_framework import filters
from rest_framework import generics
class ProductFilter(django_filters.FilterSet):
class ProductFilter(filters.FilterSet):
class Meta:
model = Product
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
import django_filters
from myapp.models import Product
from myapp.serializers import ProductSerializer
from rest_framework import filters
from rest_framework import generics
class ProductFilter(django_filters.FilterSet):
class ProductFilter(filters.FilterSet):
manufacturer = django_filters.CharFilter(name="manufacturer__name")
class Meta:
......
......@@ -35,14 +35,6 @@ For more complex cases you might also want to override various methods on the vi
serializer_class = UserSerializer
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):
# Note the use of `get_queryset()` instead of `self.queryset`
queryset = self.get_queryset()
......@@ -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.
#### `filter_queryset(self, queryset)`
Given a queryset, filter it with whichever filter backends are in use, returning a new queryset.
For example:
def filter_queryset(self, queryset):
filter_backends = (CategoryFilter,)
if 'geo_route' in self.request.query_params:
filter_backends = (GeoRouteFilter, CategoryFilter)
elif 'geo_point' in self.request.query_params:
filter_backends = (GeoPointFilter, CategoryFilter)
for backend in list(filter_backends):
queryset = backend().filter_queryset(self.request, queryset, view=self)
return queryset
#### `get_serializer_class(self)`
......@@ -156,19 +148,6 @@ For example:
return FullAccountSerializer
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**:
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
[DestroyModelMixin]: #destroymodelmixin
[django-rest-framework-bulk]: https://github.com/miki725/django-rest-framework-bulk
[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
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
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
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_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.
......@@ -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.
* 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.
......
......@@ -51,6 +51,9 @@ using the `APIView` class based views.
return Response({'received data': request.data})
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'])
@parser_classes((JSONParser,))
......
......@@ -100,6 +100,8 @@ Or, if you're using the `@api_view` decorator with function based views.
}
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
......
......@@ -459,7 +459,7 @@ In cases where the cutoff is being enforced you may want to instead use a plain
assigned_to = serializers.SlugRelatedField(
queryset=User.objects.all(),
slug field='username',
slug_field='username',
style={'base_template': 'input.html'}
)
......
......@@ -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**: 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`
**.format**: `'.admin'`
......
......@@ -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 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?
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:
......@@ -800,7 +802,13 @@ Here's an example of how you might choose to implement multiple updates:
return ret
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:
list_serializer_class = BookListSerializer
......
......@@ -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_429_TOO_MANY_REQUESTS
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS
## Server Error - 5xx
......
......@@ -130,12 +130,12 @@ Your URL conf must include a pattern that matches the version with a `'version'`
urlpatterns = [
url(
r'^(?P<version>[v1|v2]+)/bookings/$',
r'^(?P<version>(v1|v2))/bookings/$',
bookings_list,
name='bookings-list'
),
url(
r'^(?P<version>[v1|v2]+)/bookings/(?P<pk>[0-9]+)/$',
r'^(?P<version>(v1|v2))/bookings/(?P<pk>[0-9]+)/$',
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
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
......@@ -231,7 +231,7 @@ Send a description of the issue via email to [rest-framework-security@googlegrou
## License
Copyright (c) 2011-2015, Tom Christie
Copyright (c) 2011-2016, Tom Christie
All rights reserved.
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.
[eventbrite]: https://www.eventbrite.co.uk/about/
[markdown]: http://pypi.python.org/pypi/Markdown/
[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
[0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X
[image]: img/quickstart.png
......
......@@ -17,7 +17,7 @@ By default, the API will return the format specified by the headers, which in th
## 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:
......
......@@ -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,
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
[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
[swagger]: https://developers.helloreverb.com/swagger/
[rest-framework-docs]: https://github.com/marcgibbons/django-rest-framework-docs
[apiary]: http://apiary.io/
[markdown]: http://daringfireball.net/projects/markdown/
[hypermedia-docs]: rest-hypermedia-hateoas.md
[image-drf-docs]: ../img/drfdocs.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-self-describing-api]: ../img/self-describing.png
......@@ -40,6 +40,28 @@ You can determine your currently installed version using `pip freeze`:
## 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
**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-
[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.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 -->
[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-
[gh3568]: https://github.com/tomchristie/django-rest-framework/issues/3568
[gh3592]: https://github.com/tomchristie/django-rest-framework/issues/3592
[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
* [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-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
......@@ -222,11 +223,13 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
### Parsers
* [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.
### Renderers
* [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.
* [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
[cookiecutter-django-rest]: https://github.com/agconti/cookiecutter-django-rest
[drf-haystack]: http://drf-haystack.readthedocs.org/en/latest/
[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
'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.
## Creating a model to work with
......@@ -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:
>>> from snippets.serializers import SnippetSerializer
>>> serializer = SnippetSerializer()
>>> print(repr(serializer))
SnippetSerializer():
id = IntegerField(label='ID', read_only=True)
title = CharField(allow_blank=True, max_length=100, required=False)
code = CharField(style={'base_template': 'textarea.html'})
linenos = BooleanField(required=False)
language = ChoiceField(choices=[('Clipper', 'FoxPro'), ('Cucumber', 'Gherkin'), ('RobotFramework', 'RobotFramework'), ('abap', 'ABAP'), ('ada', 'Ada')...
style = ChoiceField(choices=[('autumn', 'autumn'), ('borland', 'borland'), ('bw', 'bw'), ('colorful', 'colorful')...
from snippets.serializers import SnippetSerializer
serializer = SnippetSerializer()
print(repr(serializer))
# SnippetSerializer():
# id = IntegerField(label='ID', read_only=True)
# title = CharField(allow_blank=True, max_length=100, required=False)
# code = CharField(style={'base_template': 'textarea.html'})
# linenos = BooleanField(required=False)
# language = ChoiceField(choices=[('Clipper', 'FoxPro'), ('Cucumber', 'Gherkin'), ('RobotFramework', 'RobotFramework'), ('abap', 'ABAP'), ('ada', 'Ada')...
# 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:
......@@ -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/(?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.
......
......@@ -146,7 +146,7 @@ And, at the end of the file, add a pattern to include the login and logout views
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.
......
......@@ -3,4 +3,4 @@ flake8==2.4.0
pep8==1.5.7
# Sort and lint imports
isort==3.9.6
isort==4.2.2
# Optional packages which may be used with REST framework.
markdown==2.6.4
django-guardian==1.3.0
django-guardian==1.3.2
django-filter==0.10.0
......@@ -5,4 +5,4 @@ wheel==0.24.0
twine==1.4.0
# Transifex client for managing translation resources.
transifex-client==0.11b3
transifex-client==0.11
# PyTest for running the tests.
pytest==2.6.4
pytest-django==2.8.0
pytest==2.8.5
pytest-django==2.9.1
pytest-cov==1.8.1
......@@ -8,10 +8,10 @@ ______ _____ _____ _____ __
"""
__title__ = 'Django REST framework'
__version__ = '3.3.1'
__version__ = '3.3.2'
__author__ = 'Tom Christie'
__license__ = 'BSD 2-Clause'
__copyright__ = 'Copyright 2011-2015 Tom Christie'
__copyright__ = 'Copyright 2011-2016 Tom Christie'
# Version synonym
VERSION = __version__
......
......@@ -10,7 +10,6 @@ from django.middleware.csrf import CsrfViewMiddleware
from django.utils.translation import ugettext_lazy as _
from rest_framework import HTTP_HEADER_ENCODING, exceptions
from rest_framework.authtoken.models import Token
def get_authorization_header(request):
......@@ -149,7 +148,14 @@ class TokenAuthentication(BaseAuthentication):
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.
......@@ -179,9 +185,10 @@ class TokenAuthentication(BaseAuthentication):
return self.authenticate_credentials(token)
def authenticate_credentials(self, key):
model = self.get_model()
try:
token = self.model.objects.select_related('user').get(key=key)
except self.model.DoesNotExist:
token = model.objects.select_related('user').get(key=key)
except model.DoesNotExist:
raise exceptions.AuthenticationFailed(_('Invalid token.'))
if not token.user.is_active:
......
......@@ -18,17 +18,10 @@ class Token(models.Model):
The default authorization token model.
"""
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)
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):
if not self.key:
self.key = self.generate_key()
......
......@@ -12,7 +12,7 @@ class ObtainAuthToken(APIView):
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializer
def post(self, request):
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
......
......@@ -9,6 +9,7 @@ from __future__ import unicode_literals
import django
from django.conf import settings
from django.db import connection, transaction
from django.template import Context, RequestContext, Template
from django.utils import six
from django.views.generic import View
......@@ -200,6 +201,7 @@ try:
except ImportError:
DecimalValidator = None
def set_rollback():
if hasattr(transaction, 'set_rollback'):
if connection.settings_dict.get('ATOMIC_REQUESTS', False):
......@@ -215,3 +217,54 @@ def set_rollback():
else:
# transaction not managed
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):
try:
if isinstance(data, six.integer_types):
return uuid.UUID(int=data)
else:
elif isinstance(data, six.string_types):
return uuid.UUID(hex=data)
except (ValueError, TypeError):
else:
self.fail('invalid', value=data)
except (ValueError):
self.fail('invalid', value=data)
return data
......@@ -1059,6 +1061,9 @@ class DateTimeField(Field):
self.fail('invalid', format=humanized_format)
def to_representation(self, value):
if not value:
return None
output_format = getattr(self, 'format', api_settings.DATETIME_FORMAT)
if output_format is None:
......@@ -1116,11 +1121,11 @@ class DateField(Field):
self.fail('invalid', format=humanized_format)
def to_representation(self, value):
output_format = getattr(self, 'format', api_settings.DATE_FORMAT)
if not value:
return None
output_format = getattr(self, 'format', api_settings.DATE_FORMAT)
if output_format is None:
return value
......@@ -1134,7 +1139,7 @@ class DateField(Field):
)
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()
return value.isoformat()
......@@ -1181,6 +1186,9 @@ class TimeField(Field):
self.fail('invalid', format=humanized_format)
def to_representation(self, value):
if not value:
return None
output_format = getattr(self, 'format', api_settings.TIME_FORMAT)
if output_format is None:
......@@ -1196,6 +1204,8 @@ class TimeField(Field):
)
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.strftime(output_format)
......@@ -1461,7 +1471,7 @@ class ListField(Field):
"""
if html.is_html_input(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__)
if not self.allow_empty and len(data) == 0:
self.fail('empty')
......@@ -1565,7 +1575,7 @@ class ReadOnlyField(Field):
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')
"""
......
......@@ -10,12 +10,12 @@ from functools import reduce
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.db import models
from django.template import Context, loader
from django.template import loader
from django.utils import six
from django.utils.translation import ugettext_lazy as _
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
......@@ -99,7 +99,7 @@ class DjangoFilterBackend(BaseFilterBackend):
return filter_class
if filter_fields:
class AutoFilterSet(FilterSet):
class AutoFilterSet(self.default_filter_set):
class Meta:
model = queryset.model
fields = filter_fields
......@@ -118,15 +118,14 @@ class DjangoFilterBackend(BaseFilterBackend):
def to_html(self, request, queryset, view):
filter_class = self.get_filter_class(view, queryset)
if filter_class:
filter_instance = filter_class(request.query_params, queryset=queryset)
else:
filter_instance = None
context = Context({
if not filter_class:
return None
filter_instance = filter_class(request.query_params, queryset=queryset)
context = {
'filter': filter_instance
})
}
template = loader.get_template(self.template)
return template.render(context)
return template_render(template, context)
class SearchFilter(BaseFilterBackend):
......@@ -185,12 +184,12 @@ class SearchFilter(BaseFilterBackend):
term = self.get_search_terms(request)
term = term[0] if term else ''
context = Context({
context = {
'param': self.search_param,
'term': term
})
}
template = loader.get_template(self.template)
return template.render(context)
return template_render(template, context)
class OrderingFilter(BaseFilterBackend):
......@@ -284,8 +283,8 @@ class OrderingFilter(BaseFilterBackend):
def to_html(self, request, queryset, view):
template = loader.get_template(self.template)
context = Context(self.get_template_context(request, queryset, view))
return template.render(context)
context = self.get_template_context(request, queryset, view)
return template_render(template, context)
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 ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\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: Belarusian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/be/)\n"
"MIME-Version: 1.0\n"
......@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
#: authentication.py:185
msgid "Invalid token."
msgstr ""
......@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled."
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
msgid "This field is required."
msgstr ""
#: fields.py:263
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#: 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:809 fields.py:844 fields.py:877
#: 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:810 fields.py:845 fields.py:881
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#: 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:994
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
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
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
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."
msgstr ""
#: fields.py:1452
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
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
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#: 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
......
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\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: Catalan (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ca_ES/)\n"
"MIME-Version: 1.0\n"
......@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
#: authentication.py:185
msgid "Invalid token."
msgstr ""
......@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled."
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
msgid "This field is required."
msgstr ""
#: fields.py:263
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#: 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:809 fields.py:844 fields.py:877
#: 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:810 fields.py:845 fields.py:881
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#: 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:994
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
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
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
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."
msgstr ""
#: fields.py:1452
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
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
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#: 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
......
# 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 ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\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 (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/en_CA/)\n"
"MIME-Version: 1.0\n"
......@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
#: authentication.py:185
msgid "Invalid token."
msgstr ""
......@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled."
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
msgid "This field is required."
msgstr ""
#: fields.py:263
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#: 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:809 fields.py:844 fields.py:877
#: 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:810 fields.py:845 fields.py:881
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#: 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:994
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
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
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
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."
msgstr ""
#: fields.py:1452
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
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
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#: 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
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
#: authentication.py:185
msgid "Invalid token."
msgstr ""
......@@ -108,239 +108,265 @@ msgstr ""
msgid "Request was throttled."
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
msgid "This field is required."
msgstr ""
#: fields.py:263
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#: 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:809 fields.py:844 fields.py:877
#: 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:810 fields.py:845 fields.py:881
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#: fields.py:888
#, python-brace-format
msgid "Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#: 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:994
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
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
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
#: fields.py:1340
msgid "The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
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."
msgstr ""
#: fields.py:1452
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
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
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#: 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
......
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\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: French (Canada) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fr_CA/)\n"
"MIME-Version: 1.0\n"
......@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
#: authentication.py:185
msgid "Invalid token."
msgstr ""
......@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled."
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
msgid "This field is required."
msgstr ""
#: fields.py:263
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#: 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:809 fields.py:844 fields.py:877
#: 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:810 fields.py:845 fields.py:881
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#: 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:994
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
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
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
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."
msgstr ""
#: fields.py:1452
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
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
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#: 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
......
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\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: Galician (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl/)\n"
"MIME-Version: 1.0\n"
......@@ -33,24 +33,24 @@ msgstr ""
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
#: authentication.py:185
msgid "Invalid token."
msgstr ""
......@@ -108,241 +108,267 @@ msgstr ""
msgid "Request was throttled."
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
msgid "This field is required."
msgstr ""
#: fields.py:263
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#: 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:809 fields.py:844 fields.py:877
#: 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:810 fields.py:845 fields.py:881
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#: 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:994
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
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
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
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."
msgstr ""
#: fields.py:1452
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
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
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
#: relations.py:392
msgid "Invalid value."
msgstr ""
#: serializers.py:310
#: 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
......
......@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-21 10:55+0200\n"
"PO-Revision-Date: 2015-09-21 08:56+0000\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: Galician (Spain) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/gl_ES/)\n"
"MIME-Version: 1.0\n"
......@@ -34,24 +34,24 @@ msgstr ""
msgid "Invalid username/password."
msgstr ""
#: authentication.py:101 authentication.py:189
#: authentication.py:101 authentication.py:188
msgid "User inactive or deleted."
msgstr ""
#: authentication.py:168
#: authentication.py:167
msgid "Invalid token header. No credentials provided."
msgstr ""
#: authentication.py:171
#: authentication.py:170
msgid "Invalid token header. Token string should not contain spaces."
msgstr ""
#: authentication.py:177
#: authentication.py:176
msgid ""
"Invalid token header. Token string should not contain invalid characters."
msgstr ""
#: authentication.py:186
#: authentication.py:185
msgid "Invalid token."
msgstr ""
......@@ -109,241 +109,267 @@ msgstr ""
msgid "Request was throttled."
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
msgid "This field is required."
msgstr ""
#: fields.py:263
#: fields.py:267
msgid "This field may not be null."
msgstr ""
#: fields.py:599 fields.py:627
#: fields.py:603 fields.py:634
#, python-brace-format
msgid "\"{input}\" is not a valid boolean."
msgstr ""
#: fields.py:662
#: fields.py:669
msgid "This field may not be blank."
msgstr ""
#: fields.py:663 fields.py:1594
#: fields.py:670 fields.py:1656
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
msgstr ""
#: fields.py:664
#: fields.py:671
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
msgstr ""
#: fields.py:701
#: fields.py:708
msgid "Enter a valid email address."
msgstr ""
#: fields.py:712
#: fields.py:719
msgid "This value does not match the required pattern."
msgstr ""
#: fields.py:723
#: fields.py:730
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
msgstr ""
#: fields.py:735
#: fields.py:742
msgid "Enter a valid URL."
msgstr ""
#: fields.py:748
#: fields.py:755
#, python-brace-format
msgid "\"{value}\" is not a valid UUID."
msgstr ""
#: fields.py:782
#: fields.py:791
msgid "Enter a valid IPv4 or IPv6 address."
msgstr ""
#: fields.py:807
#: fields.py:816
msgid "A valid integer is required."
msgstr ""
#: fields.py:808 fields.py:843 fields.py:876
#: 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:809 fields.py:844 fields.py:877
#: 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:810 fields.py:845 fields.py:881
#: fields.py:819 fields.py:854 fields.py:890
msgid "String value too large."
msgstr ""
#: fields.py:842 fields.py:875
#: fields.py:851 fields.py:884
msgid "A valid number is required."
msgstr ""
#: fields.py:878
#: fields.py:887
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
msgstr ""
#: fields.py:879
#: fields.py:888
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_decimal_places} decimal places."
msgstr ""
#: fields.py:880
#: 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:994
#: fields.py:1004
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:995
#: fields.py:1005
msgid "Expected a datetime but got a date."
msgstr ""
#: fields.py:1060
#: fields.py:1079
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1061
#: fields.py:1080
msgid "Expected a date but got a datetime."
msgstr ""
#: fields.py:1125
#: fields.py:1148
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1180
#: fields.py:1207
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr ""
#: fields.py:1205 fields.py:1254
#: fields.py:1232 fields.py:1281
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr ""
#: fields.py:1208 relations.py:58 relations.py:427
#: fields.py:1235 relations.py:62 relations.py:431
#, python-brace-format
msgid "More than {count} items..."
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
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr ""
#: fields.py:1256
#: fields.py:1283
msgid "This selection may not be empty."
msgstr ""
#: fields.py:1294
#: fields.py:1320
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
msgstr ""
#: fields.py:1313
#: fields.py:1339
msgid "No file was submitted."
msgstr ""
#: fields.py:1314
#: fields.py:1340
msgid ""
"The submitted data was not a file. Check the encoding type on the form."
msgstr ""
#: fields.py:1315
#: fields.py:1341
msgid "No filename could be determined."
msgstr ""
#: fields.py:1316
#: fields.py:1342
msgid "The submitted file is empty."
msgstr ""
#: fields.py:1317
#: fields.py:1343
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
msgstr ""
#: fields.py:1363
#: fields.py:1391
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
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."
msgstr ""
#: fields.py:1452
#: fields.py:1483
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
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
msgid "Invalid page \"{page_number}\": {message}."
msgstr ""
#: pagination.py:462
#: pagination.py:407
msgid "Invalid cursor"
msgstr ""
#: relations.py:192
#: relations.py:196
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr ""
#: relations.py:193
#: relations.py:197
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
msgstr ""
#: relations.py:225
#: relations.py:229
msgid "Invalid hyperlink - No URL match."
msgstr ""
#: relations.py:226
#: relations.py:230
msgid "Invalid hyperlink - Incorrect URL match."
msgstr ""
#: relations.py:227
#: relations.py:231
msgid "Invalid hyperlink - Object does not exist."
msgstr ""
#: relations.py:228
#: relations.py:232
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr ""
#: relations.py:387
#: relations.py:391
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr ""
#: relations.py:388
#: relations.py:392
msgid "Invalid value."
msgstr "Valor non válido."
#: serializers.py:310
#: 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
......
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