diff --git a/.github/ISSUE_TEMPLATE/1-issue.md b/.github/ISSUE_TEMPLATE/1-issue.md
deleted file mode 100644
index 87fa57a89..000000000
--- a/.github/ISSUE_TEMPLATE/1-issue.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-name: Issue
-about: Please only raise an issue if you've been advised to do so after discussion. Thanks! π
----
-
-## Checklist
-
-
-
-- [ ] Raised initially as discussion #...
-- [ ] This is not a feature request suitable for implementation outside this project. Please elaborate what it is:
- - [ ] compatibility fix for new Django/Python version ...
- - [ ] other type of bug fix
- - [ ] other type of improvement that does not touch existing code or change existing behavior (e.g. wrapper for new Django field)
-- [ ] I have reduced the issue to the simplest possible case.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index 382fc521a..000000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-blank_issues_enabled: false
-contact_links:
-- name: Discussions
- url: https://github.com/encode/django-rest-framework/discussions
- about: >
- The "Discussions" forum is where you want to start. π
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index cfa4bdc44..bf158311a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -9,12 +9,11 @@ on:
jobs:
tests:
name: Python ${{ matrix.python-version }}
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
strategy:
matrix:
python-version:
- - '3.8'
- '3.9'
- '3.10'
- '3.11'
@@ -51,7 +50,7 @@ jobs:
test-docs:
name: Test documentation links
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fb01f8bf7..644a719c8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,6 +2,4 @@
At this point in its lifespan we consider Django REST framework to be essentially feature-complete. We may accept pull requests that track the continued development of Django versions, but would prefer not to accept new features or code formatting changes.
-Apart from minor documentation changes, the [GitHub discussions page](https://github.com/encode/django-rest-framework/discussions) should generally be your starting point. Please only raise an issue or pull request if you've been recommended to do so after discussion.
-
The [Contributing guide in the documentation](https://www.django-rest-framework.org/community/contributing/) gives some more information on our process and code of conduct.
diff --git a/README.md b/README.md
index 95fb1b012..be6619b4e 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,7 @@ Some reasons you might want to use REST framework:
# Requirements
-* Python 3.8+
+* Python 3.9+
* Django 4.2, 5.0, 5.1, 5.2
We **highly recommend** and only officially support the latest patch release of
diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md
index 5cbedd964..3225191f1 100644
--- a/docs/api-guide/fields.md
+++ b/docs/api-guide/fields.md
@@ -552,7 +552,7 @@ For further examples on `HiddenField` see the [validators](validators.md) docume
---
-**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). This behavior might change in future, follow updates on [github discussion](https://github.com/encode/django-rest-framework/discussions/8259).
+**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request).
---
diff --git a/docs/api-guide/throttling.md b/docs/api-guide/throttling.md
index 0ea8b4158..e6d7774a6 100644
--- a/docs/api-guide/throttling.md
+++ b/docs/api-guide/throttling.md
@@ -110,7 +110,7 @@ You'll need to remember to also set your custom throttle class in the `'DEFAULT_
The built-in throttle implementations are open to [race conditions][race], so under high concurrency they may allow a few extra requests through.
-If your project relies on guaranteeing the number of requests during concurrent requests, you will need to implement your own throttle class. See [issue #5181][gh5181] for more details.
+If your project relies on guaranteeing the number of requests during concurrent requests, you will need to implement your own throttle class.
---
@@ -220,5 +220,4 @@ The following is an example of a rate throttle, that will randomly throttle 1 in
[identifying-clients]: http://oxpedia.org/wiki/index.php?title=AppSuite:Grizzly#Multiple_Proxies_in_front_of_the_cluster
[cache-setting]: https://docs.djangoproject.com/en/stable/ref/settings/#caches
[cache-docs]: https://docs.djangoproject.com/en/stable/topics/cache/#setting-up-the-cache
-[gh5181]: https://github.com/encode/django-rest-framework/issues/5181
[race]: https://en.wikipedia.org/wiki/Race_condition#Data_race
diff --git a/docs/api-guide/validators.md b/docs/api-guide/validators.md
index b1f58ef23..57bcb8628 100644
--- a/docs/api-guide/validators.md
+++ b/docs/api-guide/validators.md
@@ -166,7 +166,7 @@ If you want the date field to be entirely hidden from the user, then use `Hidden
---
-**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). This behavior might change in future, follow updates on [github discussion](https://github.com/encode/django-rest-framework/discussions/8259).
+**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request).
---
diff --git a/docs/community/3.16-announcement.md b/docs/community/3.16-announcement.md
new file mode 100644
index 000000000..b8f460ae7
--- /dev/null
+++ b/docs/community/3.16-announcement.md
@@ -0,0 +1,42 @@
+
+
+# Django REST framework 3.16
+
+At the Internet, on March 28th, 2025, we are happy to announce the release of Django REST framework 3.16.
+
+## Updated Django and Python support
+
+The latest release now fully supports Django 5.1 and the upcoming 5.2 LTS as well as Python 3.13.
+
+The current minimum versions of Django is now 4.2 and Python 3.9.
+
+## Django LoginRequiredMiddleware
+
+The new `LoginRequiredMiddleware` introduced by Django 5.1 can now be used alongside Django REST Framework, however it is not honored for API views as an equivalent behaviour can be configured via `DEFAULT_AUTHENTICATION_CLASSES`. See [our dedicated section](../api-guide/authentication.md#django-51-loginrequiredmiddleware) in the docs for more information.
+
+## Improved support for UniqueConstraint
+
+The generation of validators for [UniqueConstraint](https://docs.djangoproject.com/en/stable/ref/models/constraints/#uniqueconstraint) has been improved to support better nullable fields and constraints with conditions.
+
+## Other fixes and improvements
+
+There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behaviour.
+
+See the [release notes](release-notes.md) page for a complete listing.
diff --git a/docs/community/contributing.md b/docs/community/contributing.md
index 5dea6426d..5a9188943 100644
--- a/docs/community/contributing.md
+++ b/docs/community/contributing.md
@@ -4,8 +4,6 @@
>
> — [Tim Berners-Lee][cite]
-There are many ways you can contribute to Django REST framework. We'd like it to be a community-led project, so please get involved and help shape the future of the project.
-
!!! note
At this point in its lifespan we consider Django REST framework to be feature-complete. We focus on pull requests that track the continued development of Django versions, and generally do not accept new features or code formatting changes.
@@ -30,24 +28,9 @@ The [Django code of conduct][code-of-conduct] gives a fuller set of guidelines f
# Issues
-Our contribution process is that the [GitHub discussions page](https://github.com/encode/django-rest-framework/discussions) should generally be your starting point. Please only raise an issue or pull request if you've been recommended to do so after discussion.
-
-Some tips on good potential issue reporting:
-
* Django REST framework is considered feature-complete. Please do not file requests to change behavior, unless it is required for security reasons or to maintain compatibility with upcoming Django or Python versions.
-* Search the GitHub project page for related items, and make sure you're running the latest version of REST framework before reporting an issue.
* Feature requests will typically be closed with a recommendation that they be implemented outside the core REST framework library (e.g. as third-party libraries). This approach allows us to keep down the maintenance overhead of REST framework, so that the focus can be on continued stability and great documentation.
-## Triaging issues
-
-Getting involved in triaging incoming issues is a good way to start contributing. Every single ticket that comes into the ticket tracker needs to be reviewed in order to determine what the next steps should be. Anyone can help out with this, you just need to be willing to
-
-* Read through the ticket - does it make sense, is it missing any context that would help explain it better?
-* Is the ticket reported in the correct place, would it be better suited as a discussion on the discussion group?
-* If the ticket is a bug report, can you reproduce it? Are you able to write a failing test case that demonstrates the issue and that can be submitted as a pull request?
-* If the ticket is a feature request, could the feature request instead be implemented as a third party package?
-* If a ticket hasn't had much activity and addresses something you need, then comment on the ticket and try to find out what's needed to get it moving again.
-
# Development
To start developing on Django REST framework, first create a Fork from the
@@ -206,7 +189,6 @@ If you want to draw attention to a note or warning, use a pair of enclosing line
[code-of-conduct]: https://www.djangoproject.com/conduct/
[google-group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
[so-filter]: https://stackexchange.com/filters/66475/rest-framework
-[issues]: https://github.com/encode/django-rest-framework/issues?state=open
[pep-8]: https://www.python.org/dev/peps/pep-0008/
[build-status]: ../img/build-status.png
[pull-requests]: https://help.github.com/articles/using-pull-requests
diff --git a/docs/community/project-management.md b/docs/community/project-management.md
index 4f203e13b..daf2cda8d 100644
--- a/docs/community/project-management.md
+++ b/docs/community/project-management.md
@@ -34,7 +34,6 @@ Further notes for maintainers:
* Code changes should come in the form of a pull request - do not push directly to master.
* Maintainers should typically not merge their own pull requests.
* Each issue/pull request should have exactly one label once triaged.
-* Search for un-triaged issues with [is:open no:label][un-triaged].
---
@@ -157,7 +156,6 @@ The following issues still need to be addressed:
* Document ownership and management of the security mailing list.
[bus-factor]: https://en.wikipedia.org/wiki/Bus_factor
-[un-triaged]: https://github.com/encode/django-rest-framework/issues?q=is%3Aopen+no%3Alabel
[transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/
[transifex-client]: https://pypi.org/project/transifex-client/
[translation-memory]: http://docs.transifex.com/guides/tm#let-tm-automatically-populate-translations
diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md
index 5742e9469..c7b82e985 100644
--- a/docs/community/release-notes.md
+++ b/docs/community/release-notes.md
@@ -36,6 +36,90 @@ You can determine your currently installed version using `pip show`:
---
+## 3.16.x series
+
+### 3.16.0
+
+**Date**: 28th March 2025
+
+This release is considered a significant release to improve upstream support with Django and Python. Some of these may change the behaviour of existing features and pre-existing behaviour. Specifically, some fixes were added to around the support of `UniqueConstraint` with nullable fields which will improve built-in serializer validation.
+
+## Features
+
+* Add official support for Django 5.1 and its new `LoginRequiredMiddleware` in [#9514](https://github.com/encode/django-rest-framework/pull/9514) and [#9657](https://github.com/encode/django-rest-framework/pull/9657)
+* Add official Django 5.2a1 support in [#9634](https://github.com/encode/django-rest-framework/pull/9634)
+* Add support for Python 3.13 in [#9527](https://github.com/encode/django-rest-framework/pull/9527) and [#9556](https://github.com/encode/django-rest-framework/pull/9556)
+* Support Django 2.1+ test client JSON data automatically serialized in [#6511](https://github.com/encode/django-rest-framework/pull/6511) and fix a regression in [#9615](https://github.com/encode/django-rest-framework/pull/9615)
+
+## Bug fixes
+
+* Fix unique together validator to respect condition's fields from `UniqueConstraint` in [#9360](https://github.com/encode/django-rest-framework/pull/9360)
+* Fix raising on nullable fields part of `UniqueConstraint` in [#9531](https://github.com/encode/django-rest-framework/pull/9531)
+* Fix `unique_together` validation with source in [#9482](https://github.com/encode/django-rest-framework/pull/9482)
+* Added protections to `AttributeError` raised within properties in [#9455](https://github.com/encode/django-rest-framework/pull/9455)
+* Fix `get_template_context` to handle also lists in [#9467](https://github.com/encode/django-rest-framework/pull/9467)
+* Fix "Converter is already registered" deprecation warning. in [#9512](https://github.com/encode/django-rest-framework/pull/9512)
+* Fix noisy warning and accept integers as min/max values of `DecimalField` in [#9515](https://github.com/encode/django-rest-framework/pull/9515)
+* Fix usages of `open()` in `setup.py` in [#9661](https://github.com/encode/django-rest-framework/pull/9661)
+
+## Translations
+
+* Add some missing Chinese translations in [#9505](https://github.com/encode/django-rest-framework/pull/9505)
+* Fix spelling mistakes in Farsi language were corrected in [#9521](https://github.com/encode/django-rest-framework/pull/9521)
+* Fixing and adding missing Brazilian Portuguese translations in [#9535](https://github.com/encode/django-rest-framework/pull/9535)
+
+## Removals
+
+* Remove support for Python 3.8 in [#9670](https://github.com/encode/django-rest-framework/pull/9670)
+* Remove long deprecated code from request wrapper in [#9441](https://github.com/encode/django-rest-framework/pull/9441)
+* Remove deprecated `AutoSchema._get_reference` method in [#9525](https://github.com/encode/django-rest-framework/pull/9525)
+
+## Documentation and internal changes
+
+* Provide tests for hashing of `OperandHolder` in [#9437](https://github.com/encode/django-rest-framework/pull/9437)
+* Update documentation: Add `adrf` third party package in [#9198](https://github.com/encode/django-rest-framework/pull/9198)
+* Update tutorials links in Community contributions docs in [#9476](https://github.com/encode/django-rest-framework/pull/9476)
+* Fix usage of deprecated Django function in example from docs in [#9509](https://github.com/encode/django-rest-framework/pull/9509)
+* Move path converter docs into a separate section in [#9524](https://github.com/encode/django-rest-framework/pull/9524)
+* Add test covering update view without `queryset` attribute in [#9528](https://github.com/encode/django-rest-framework/pull/9528)
+* Fix Transifex link in [#9541](https://github.com/encode/django-rest-framework/pull/9541)
+* Fix example `httpie` call in docs in [#9543](https://github.com/encode/django-rest-framework/pull/9543)
+* Fix example for serializer field with choices in docs in [#9563](https://github.com/encode/django-rest-framework/pull/9563)
+* Remove extra `<>` in validators example in [#9590](https://github.com/encode/django-rest-framework/pull/9590)
+* Update `strftime` link in the docs in [#9624](https://github.com/encode/django-rest-framework/pull/9624)
+* Switch to codecov GHA in [#9618](https://github.com/encode/django-rest-framework/pull/9618)
+* Add note regarding availability of the `action` attribute in 'Introspecting ViewSet actions' docs section in [#9633](https://github.com/encode/django-rest-framework/pull/9633)
+* Improved description of allowed throttling rates in documentation in [#9640](https://github.com/encode/django-rest-framework/pull/9640)
+* Add `rest-framework-gm2m-relations` package to the list of 3rd party libraries in [#9063](https://github.com/encode/django-rest-framework/pull/9063)
+* Fix a number of typos in the test suite in the docs in [#9662](https://github.com/encode/django-rest-framework/pull/9662)
+* Add `django-pyoidc` as a third party authentication library in [#9667](https://github.com/encode/django-rest-framework/pull/9667)
+
+## New Contributors
+
+* [`@maerteijn`](https://github.com/maerteijn) made their first contribution in [#9198](https://github.com/encode/django-rest-framework/pull/9198)
+* [`@FraCata00`](https://github.com/FraCata00) made their first contribution in [#9444](https://github.com/encode/django-rest-framework/pull/9444)
+* [`@AlvaroVega`](https://github.com/AlvaroVega) made their first contribution in [#9451](https://github.com/encode/django-rest-framework/pull/9451)
+* [`@james`](https://github.com/james)-mchugh made their first contribution in [#9455](https://github.com/encode/django-rest-framework/pull/9455)
+* [`@ifeanyidavid`](https://github.com/ifeanyidavid) made their first contribution in [#9479](https://github.com/encode/django-rest-framework/pull/9479)
+* [`@p`](https://github.com/p)-schlickmann made their first contribution in [#9480](https://github.com/encode/django-rest-framework/pull/9480)
+* [`@akkuman`](https://github.com/akkuman) made their first contribution in [#9505](https://github.com/encode/django-rest-framework/pull/9505)
+* [`@rafaelgramoschi`](https://github.com/rafaelgramoschi) made their first contribution in [#9509](https://github.com/encode/django-rest-framework/pull/9509)
+* [`@Sinaatkd`](https://github.com/Sinaatkd) made their first contribution in [#9521](https://github.com/encode/django-rest-framework/pull/9521)
+* [`@gtkacz`](https://github.com/gtkacz) made their first contribution in [#9535](https://github.com/encode/django-rest-framework/pull/9535)
+* [`@sliverc`](https://github.com/sliverc) made their first contribution in [#9556](https://github.com/encode/django-rest-framework/pull/9556)
+* [`@gabrielromagnoli1987`](https://github.com/gabrielromagnoli1987) made their first contribution in [#9543](https://github.com/encode/django-rest-framework/pull/9543)
+* [`@cheehong1030`](https://github.com/cheehong1030) made their first contribution in [#9563](https://github.com/encode/django-rest-framework/pull/9563)
+* [`@amansharma612`](https://github.com/amansharma612) made their first contribution in [#9590](https://github.com/encode/django-rest-framework/pull/9590)
+* [`@Gluroda`](https://github.com/Gluroda) made their first contribution in [#9616](https://github.com/encode/django-rest-framework/pull/9616)
+* [`@deepakangadi`](https://github.com/deepakangadi) made their first contribution in [#9624](https://github.com/encode/django-rest-framework/pull/9624)
+* [`@EXG1O`](https://github.com/EXG1O) made their first contribution in [#9633](https://github.com/encode/django-rest-framework/pull/9633)
+* [`@decadenza`](https://github.com/decadenza) made their first contribution in [#9640](https://github.com/encode/django-rest-framework/pull/9640)
+* [`@mojtabaakbari221b`](https://github.com/mojtabaakbari221b) made their first contribution in [#9063](https://github.com/encode/django-rest-framework/pull/9063)
+* [`@mikemanger`](https://github.com/mikemanger) made their first contribution in [#9661](https://github.com/encode/django-rest-framework/pull/9661)
+* [`@gbip`](https://github.com/gbip) made their first contribution in [#9667](https://github.com/encode/django-rest-framework/pull/9667)
+
+**Full Changelog**: https://github.com/encode/django-rest-framework/compare/3.15.2...3.16.0
+
## 3.15.x series
### 3.15.2
diff --git a/docs/community/third-party-packages.md b/docs/community/third-party-packages.md
index 25570d6d7..d213cac3d 100644
--- a/docs/community/third-party-packages.md
+++ b/docs/community/third-party-packages.md
@@ -32,7 +32,7 @@ We suggest adding your package to the [REST Framework][rest-framework-grid] grid
#### Adding to the Django REST framework docs
-Create a [Pull Request][drf-create-pr] or [Issue][drf-create-issue] on GitHub, and we'll add a link to it from the main REST framework documentation. You can add your package under **Third party packages** of the API Guide section that best applies, like [Authentication][authentication] or [Permissions][permissions]. You can also link your package under the [Third Party Packages][third-party-packages] section.
+Create a [Pull Request][drf-create-pr] on GitHub, and we'll add a link to it from the main REST framework documentation. You can add your package under **Third party packages** of the API Guide section that best applies, like [Authentication][authentication] or [Permissions][permissions]. You can also link your package under the [Third Party Packages][third-party-packages] section.
#### Announce on the discussion group.
@@ -44,7 +44,7 @@ Django REST Framework has a growing community of developers, packages, and resou
Check out a grid detailing all the packages and ecosystem around Django REST Framework at [Django Packages][rest-framework-grid].
-To submit new content, [open an issue][drf-create-issue] or [create a pull request][drf-create-pr].
+To submit new content, [create a pull request][drf-create-pr].
## Async Support
@@ -175,7 +175,6 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
[drf-compat]: https://github.com/encode/django-rest-framework/blob/master/rest_framework/compat.py
[rest-framework-grid]: https://www.djangopackages.com/grids/g/django-rest-framework/
[drf-create-pr]: https://github.com/encode/django-rest-framework/compare
-[drf-create-issue]: https://github.com/encode/django-rest-framework/issues/new
[authentication]: ../api-guide/authentication.md
[permissions]: ../api-guide/permissions.md
[third-party-packages]: ../topics/third-party-packages/#existing-third-party-packages
diff --git a/docs/index.md b/docs/index.md
index 2638b05fa..d590d2c04 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -88,7 +88,7 @@ continued development by **[signing up for a paid plan][funding]**.
REST framework requires the following:
* Django (4.2, 5.0, 5.1, 5.2)
-* Python (3.8, 3.9, 3.10, 3.11, 3.12, 3.13)
+* Python (3.9, 3.10, 3.11, 3.12, 3.13)
We **highly recommend** and only officially support the latest patch release of
each Python and Django series.
diff --git a/mkdocs.yml b/mkdocs.yml
index a031dd69b..010aaefe2 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -66,6 +66,7 @@ nav:
- 'Contributing to REST framework': 'community/contributing.md'
- 'Project management': 'community/project-management.md'
- 'Release Notes': 'community/release-notes.md'
+ - '3.16 Announcement': 'community/3.16-announcement.md'
- '3.15 Announcement': 'community/3.15-announcement.md'
- '3.14 Announcement': 'community/3.14-announcement.md'
- '3.13 Announcement': 'community/3.13-announcement.md'
diff --git a/rest_framework/__init__.py b/rest_framework/__init__.py
index e33bfa99d..692ce9cb1 100644
--- a/rest_framework/__init__.py
+++ b/rest_framework/__init__.py
@@ -8,7 +8,7 @@ ______ _____ _____ _____ __
"""
__title__ = 'Django REST framework'
-__version__ = '3.15.2'
+__version__ = '3.16.0'
__author__ = 'Tom Christie'
__license__ = 'BSD 3-Clause'
__copyright__ = 'Copyright 2011-2023 Encode OSS Ltd'
diff --git a/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo b/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo
index c3aeb27a9..2228adcf7 100644
Binary files a/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo and b/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo differ
diff --git a/rest_framework/locale/ko_KR/LC_MESSAGES/django.po b/rest_framework/locale/ko_KR/LC_MESSAGES/django.po
index 722dc2c82..f98cad67d 100644
--- a/rest_framework/locale/ko_KR/LC_MESSAGES/django.po
+++ b/rest_framework/locale/ko_KR/LC_MESSAGES/django.po
@@ -1,37 +1,37 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
-# GarakdongBigBoy , 2017
+# JAEGYUN JUNG , 2024
# Hochul Kwak , 2018
+# GarakdongBigBoy , 2017
# Joon Hwan κΉμ€ν , 2017
# SUN CHOI , 2015
msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-13 21:45+0200\n"
+"POT-Creation-Date: 2024-10-22 16:13+0900\n"
"PO-Revision-Date: 2020-10-13 19:45+0000\n"
-"Last-Translator: Xavier Ordoquy \n"
-"Language-Team: Korean (Korea) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ko_KR/)\n"
+"Last-Translator: JAEGYUN JUNG \n"
+"Language: ko_KR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ko_KR\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: authentication.py:70
msgid "Invalid basic header. No credentials provided."
-msgstr "κΈ°λ³Έ ν€λ(basic header)κ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦λ°μ΄ν°(credentials)κ° μ 곡λμ§ μμμ΅λλ€."
+msgstr "κΈ°λ³Έ ν€λκ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦ λ°μ΄ν°κ° μ 곡λμ§ μμμ΅λλ€."
#: authentication.py:73
msgid "Invalid basic header. Credentials string should not contain spaces."
-msgstr "κΈ°λ³Έ ν€λ(basic header)κ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦λ°μ΄ν°(credentials) λ¬Έμμ΄μ λΉμΉΈ(spaces)μ ν¬ν¨νμ§ μμμΌ ν©λλ€."
+msgstr "κΈ°λ³Έ ν€λκ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦ λ°μ΄ν° λ¬Έμμ΄μ 곡백μ ν¬ν¨νμ§ μμμΌ ν©λλ€."
-#: authentication.py:83
+#: authentication.py:84
msgid "Invalid basic header. Credentials not correctly base64 encoded."
-msgstr "κΈ°λ³Έ ν€λ(basic header)κ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦λ°μ΄ν°(credentials)κ° base64λ‘ μ μ ν λΆνΈν(encode)λμ§ μμμ΅λλ€."
+msgstr "κΈ°λ³Έ ν€λκ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦ λ°μ΄ν°κ° μ¬λ°λ₯΄κ² base64 μΈμ½λ©λμ§ μμμ΅λλ€."
#: authentication.py:101
msgid "Invalid username/password."
@@ -43,11 +43,11 @@ msgstr "κ³μ μ΄ μ€μ§λμκ±°λ μμ λμμ΅λλ€."
#: authentication.py:184
msgid "Invalid token header. No credentials provided."
-msgstr "ν ν° ν€λκ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦λ°μ΄ν°(credentials)κ° μ 곡λμ§ μμμ΅λλ€."
+msgstr "ν ν° ν€λκ° μ ν¨νμ§ μμ΅λλ€. μΈμ¦ λ°μ΄ν°κ° μ 곡λμ§ μμμ΅λλ€."
#: authentication.py:187
msgid "Invalid token header. Token string should not contain spaces."
-msgstr "ν ν° ν€λκ° μ ν¨νμ§ μμ΅λλ€. ν ν° λ¬Έμμ΄μ λΉμΉΈ(spaces)μ ν¬ν¨νμ§ μμμΌ ν©λλ€."
+msgstr "ν ν° ν€λκ° μ ν¨νμ§ μμ΅λλ€. ν ν° λ¬Έμμ΄μ 곡백μ ν¬ν¨νμ§ μμμΌ ν©λλ€."
#: authentication.py:193
msgid ""
@@ -58,6 +58,10 @@ msgstr "ν ν° ν€λκ° μ ν¨νμ§ μμ΅λλ€. ν ν° λ¬Έμμ΄μ μ ν¨
msgid "Invalid token."
msgstr "ν ν°μ΄ μ ν¨νμ§ μμ΅λλ€."
+#: authtoken/admin.py:28 authtoken/serializers.py:9
+msgid "Username"
+msgstr "μ¬μ©μ μ΄λ¦"
+
#: authtoken/apps.py:7
msgid "Auth Token"
msgstr "μΈμ¦ ν ν°"
@@ -68,23 +72,19 @@ msgstr "ν€"
#: authtoken/models.py:16
msgid "User"
-msgstr "μ μ "
+msgstr "μ¬μ©μ"
#: authtoken/models.py:18
msgid "Created"
-msgstr "μμ±λ¨"
+msgstr "μμ±μΌμ"
-#: authtoken/models.py:27 authtoken/serializers.py:19
+#: authtoken/models.py:27 authtoken/models.py:54 authtoken/serializers.py:19
msgid "Token"
msgstr "ν ν°"
-#: authtoken/models.py:28
+#: authtoken/models.py:28 authtoken/models.py:55
msgid "Tokens"
-msgstr ""
-
-#: authtoken/serializers.py:9
-msgid "Username"
-msgstr "μ μ μ΄λ¦"
+msgstr "ν ν°(λ€)"
#: authtoken/serializers.py:13
msgid "Password"
@@ -92,390 +92,398 @@ msgstr "λΉλ°λ²νΈ"
#: authtoken/serializers.py:35
msgid "Unable to log in with provided credentials."
-msgstr "μ 곡λ μΈμ¦λ°μ΄ν°(credentials)λ‘λ λ‘κ·ΈμΈν μ μμ΅λλ€."
+msgstr "μ 곡λ μΈμ¦ λ°μ΄ν°λ‘λ λ‘κ·ΈμΈν μ μμ΅λλ€."
#: authtoken/serializers.py:38
msgid "Must include \"username\" and \"password\"."
msgstr "\"μμ΄λ\"μ \"λΉλ°λ²νΈ\"λ₯Ό ν¬ν¨ν΄μΌ ν©λλ€."
-#: exceptions.py:102
+#: exceptions.py:105
msgid "A server error occurred."
msgstr "μλ² μ₯μ κ° λ°μνμ΅λλ€."
-#: exceptions.py:142
+#: exceptions.py:145
msgid "Invalid input."
-msgstr ""
+msgstr "μ ν¨νμ§ μμ μ
λ ₯μ
λλ€."
-#: exceptions.py:161
+#: exceptions.py:166
msgid "Malformed request."
msgstr "μλͺ»λ μμ²μ
λλ€."
-#: exceptions.py:167
+#: exceptions.py:172
msgid "Incorrect authentication credentials."
-msgstr "μ격 μΈμ¦λ°μ΄ν°(authentication credentials)κ° μ ννμ§ μμ΅λλ€."
+msgstr "μ격 μΈμ¦ λ°μ΄ν°κ° μ¬λ°λ₯΄μ§ μμ΅λλ€."
-#: exceptions.py:173
+#: exceptions.py:178
msgid "Authentication credentials were not provided."
-msgstr "μ격 μΈμ¦λ°μ΄ν°(authentication credentials)κ° μ 곡λμ§ μμμ΅λλ€."
+msgstr "μ격 μΈμ¦ λ°μ΄ν°κ° μ 곡λμ§ μμμ΅λλ€."
-#: exceptions.py:179
+#: exceptions.py:184
msgid "You do not have permission to perform this action."
-msgstr "μ΄ μμ
μ μνν κΆν(permission)μ΄ μμ΅λλ€."
+msgstr "μ΄ μμ
μ μνν κΆνμ΄ μμ΅λλ€."
-#: exceptions.py:185
+#: exceptions.py:190
msgid "Not found."
msgstr "μ°Ύμ μ μμ΅λλ€."
-#: exceptions.py:191
+#: exceptions.py:196
#, python-brace-format
msgid "Method \"{method}\" not allowed."
-msgstr "λ©μλ(Method) \"{method}\"λ νμ©λμ§ μμ΅λλ€."
+msgstr "λ©μλ \"{method}\"λ νμ©λμ§ μμ΅λλ€."
-#: exceptions.py:202
+#: exceptions.py:207
msgid "Could not satisfy the request Accept header."
-msgstr "Accept header μμ²μ λ§μ‘±ν μ μμ΅λλ€."
+msgstr "μμ² Accept ν€λλ₯Ό λ§μ‘±μν¬ μ μμ΅λλ€."
-#: exceptions.py:212
+#: exceptions.py:217
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
msgstr "μμ²λ \"{media_type}\"κ° μ§μλμ§ μλ λ―Έλμ΄ ννμ
λλ€."
-#: exceptions.py:223
+#: exceptions.py:228
msgid "Request was throttled."
-msgstr "μμ²μ΄ μ§μ°(throttled)λμμ΅λλ€."
+msgstr "μμ²μ΄ μ νλμμ΅λλ€."
-#: exceptions.py:224
+#: exceptions.py:229
#, python-brace-format
msgid "Expected available in {wait} second."
-msgstr ""
+msgstr "{wait} μ΄ νμ μ¬μ© κ°λ₯ν©λλ€."
-#: exceptions.py:225
+#: exceptions.py:230
#, python-brace-format
msgid "Expected available in {wait} seconds."
-msgstr ""
+msgstr "{wait} μ΄ νμ μ¬μ© κ°λ₯ν©λλ€."
-#: fields.py:316 relations.py:245 relations.py:279 validators.py:90
-#: validators.py:183
+#: fields.py:292 relations.py:240 relations.py:276 validators.py:99
+#: validators.py:219
msgid "This field is required."
msgstr "μ΄ νλλ νμ νλͺ©μ
λλ€."
-#: fields.py:317
+#: fields.py:293
msgid "This field may not be null."
msgstr "μ΄ νλλ nullμΌ μ μμ΅λλ€."
-#: fields.py:701
+#: fields.py:661
msgid "Must be a valid boolean."
-msgstr ""
+msgstr "μ ν¨ν λΆλ¦¬μΈμ΄μ΄μΌ ν©λλ€."
-#: fields.py:766
+#: fields.py:724
msgid "Not a valid string."
-msgstr ""
+msgstr "μ ν¨ν λ¬Έμμ΄μ΄ μλλλ€."
-#: fields.py:767
+#: fields.py:725
msgid "This field may not be blank."
msgstr "μ΄ νλλ blankμΌ μ μμ΅λλ€."
-#: fields.py:768 fields.py:1881
+#: fields.py:726 fields.py:1881
#, python-brace-format
msgid "Ensure this field has no more than {max_length} characters."
-msgstr "μ΄ νλμ κΈμ μκ° {max_length} μ΄νμΈμ§ νμΈνμμμ€."
+msgstr "μ΄ νλμ κΈμ μκ° {max_length} μ΄νμΈμ§ νμΈνμΈμ."
-#: fields.py:769
+#: fields.py:727
#, python-brace-format
msgid "Ensure this field has at least {min_length} characters."
-msgstr "μ΄ νλμ κΈμ μκ° μ μ΄λ {min_length} μ΄μμΈμ§ νμΈνμμμ€."
+msgstr "μ΄ νλμ κΈμ μκ° μ μ΄λ {min_length} μ΄μμΈμ§ νμΈνμΈμ."
-#: fields.py:816
+#: fields.py:774
msgid "Enter a valid email address."
-msgstr "μ ν¨ν μ΄λ©μΌ μ£Όμλ₯Ό μ
λ ₯νμμμ€."
+msgstr "μ ν¨ν μ΄λ©μΌ μ£Όμλ₯Ό μ
λ ₯νμΈμ."
-#: fields.py:827
+#: fields.py:785
msgid "This value does not match the required pattern."
-msgstr "νμμ λ§μ§ μλ κ°μ
λλ€."
+msgstr "μ΄ κ°μ μꡬλλ ν¨ν΄κ³Ό μΌμΉνμ§ μμ΅λλ€."
-#: fields.py:838
+#: fields.py:796
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
-msgstr "λ¬Έμ, μ«μ, λ°μ€( _ ) λλ νμ΄ν( - )μΌλ‘ μ΄λ£¨μ΄μ§ μ ν¨ν \"slug\"λ₯Ό μ
λ ₯νμμμ€."
+msgstr "λ¬Έμ, μ«μ, λ°μ€( _ ) λλ νμ΄ν( - )μΌλ‘ μ΄λ£¨μ΄μ§ μ ν¨ν \"slug\"λ₯Ό μ
λ ₯νμΈμ."
-#: fields.py:839
+#: fields.py:797
msgid ""
"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, "
"or hyphens."
-msgstr ""
+msgstr "μ λμ½λ λ¬Έμ, μ«μ, λ°μ€( _ ) λλ νμ΄ν( - )μΌλ‘ μ΄λ£¨μ΄μ§ μ ν¨ν \"slug\"λ₯Ό μ
λ ₯νμΈμ."
-#: fields.py:854
+#: fields.py:812
msgid "Enter a valid URL."
-msgstr "μ ν¨ν URLμ μ
λ ₯νμμμ€."
+msgstr "μ ν¨ν URLμ μ
λ ₯νμΈμ."
-#: fields.py:867
+#: fields.py:825
msgid "Must be a valid UUID."
-msgstr ""
+msgstr "μ ν¨ν UUID μ΄μ΄μΌ ν©λλ€."
-#: fields.py:903
+#: fields.py:861
msgid "Enter a valid IPv4 or IPv6 address."
-msgstr "μ ν¨ν IPv4 λλ IPv6 μ£Όμλ₯Ό μ
λ ₯νμμμ€."
+msgstr "μ ν¨ν IPv4 λλ IPv6 μ£Όμλ₯Ό μ
λ ₯νμΈμ."
-#: fields.py:931
+#: fields.py:889
msgid "A valid integer is required."
-msgstr "μ ν¨ν μ μ(integer)λ₯Ό λ£μ΄μ£ΌμΈμ."
+msgstr "μ ν¨ν μ μλ₯Ό μ
λ ₯νμΈμ."
-#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366
+#: fields.py:890 fields.py:927 fields.py:966 fields.py:1349
#, python-brace-format
msgid "Ensure this value is less than or equal to {max_value}."
-msgstr "μ΄ κ°μ΄ {max_value}λ³΄λ€ μκ±°λ κ°μμ§ νμΈνμμμ€."
+msgstr "μ΄ κ°μ΄ {max_value}λ³΄λ€ μκ±°λ κ°μμ§ νμΈνμΈμ."
-#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367
+#: fields.py:891 fields.py:928 fields.py:967 fields.py:1350
#, python-brace-format
msgid "Ensure this value is greater than or equal to {min_value}."
-msgstr "μ΄ κ°μ΄ {min_value}λ³΄λ€ ν¬κ±°λ κ°μμ§ νμΈνμμμ€."
+msgstr "μ΄ κ°μ΄ {min_value}λ³΄λ€ ν¬κ±°λ κ°μμ§ νμΈνμΈμ."
-#: fields.py:934 fields.py:971 fields.py:1010
+#: fields.py:892 fields.py:929 fields.py:971
msgid "String value too large."
-msgstr "λ¬Έμμ΄ κ°μ΄ λ무 ν½λλ€."
+msgstr "λ¬Έμμ΄ κ°μ΄ λ무 κΉλλ€."
-#: fields.py:968 fields.py:1004
+#: fields.py:926 fields.py:965
msgid "A valid number is required."
-msgstr "μ ν¨ν μ«μλ₯Ό λ£μ΄μ£ΌμΈμ."
+msgstr "μ ν¨ν μ«μλ₯Ό μ
λ ₯νμΈμ."
-#: fields.py:1007
+#: fields.py:930
+msgid "Integer value too large to convert to float"
+msgstr "μ μ κ°μ΄ λ무 컀μ λΆλ μμμ μΌλ‘ λ³νν μ μμ΅λλ€."
+
+#: fields.py:968
#, python-brace-format
msgid "Ensure that there are no more than {max_digits} digits in total."
-msgstr "μ 체 μ«μ(digits)κ° {max_digits} μ΄νμΈμ§ νμΈνμμμ€."
+msgstr "μ΄ μλ¦Ώμκ° {max_digits}μ(λ₯Ό) μ΄κ³Όνμ§ μλμ§ νμΈνμΈμ."
-#: fields.py:1008
+#: fields.py:969
#, python-brace-format
-msgid ""
-"Ensure that there are no more than {max_decimal_places} decimal places."
-msgstr "μμμ μλ¦Ώμκ° {max_decimal_places} μ΄νμΈμ§ νμΈνμμμ€."
+msgid "Ensure that there are no more than {max_decimal_places} decimal places."
+msgstr "μμμ μ΄ν μλ¦Ώμκ° {max_decimal_places}μ(λ₯Ό) μ΄κ³Όνμ§ μλμ§ νμΈνμΈμ."
-#: fields.py:1009
+#: fields.py:970
#, python-brace-format
msgid ""
"Ensure that there are no more than {max_whole_digits} digits before the "
"decimal point."
-msgstr "μμμ μ리 μμ μ«μ(digits)κ° {max_whole_digits} μ΄νμΈμ§ νμΈνμμμ€."
+msgstr "μμμ μ μλ¦Ώμκ° {max_whole_digits}μ(λ₯Ό) μ΄κ³Όνμ§ μλμ§ νμΈνμΈμ."
-#: fields.py:1148
+#: fields.py:1129
#, python-brace-format
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
msgstr "Datetimeμ ν¬λ©§μ΄ μλͺ»λμμ΅λλ€. μ΄ νμλ€ μ€ νκ°μ§λ₯Ό μ¬μ©νμΈμ: {format}."
-#: fields.py:1149
+#: fields.py:1130
msgid "Expected a datetime but got a date."
-msgstr "μμλ datatime λμ dateλ₯Ό λ°μμ΅λλ€."
+msgstr "datatimeμ΄ μμλμμ§λ§ dateλ₯Ό λ°μμ΅λλ€."
-#: fields.py:1150
+#: fields.py:1131
#, python-brace-format
msgid "Invalid datetime for the timezone \"{timezone}\"."
-msgstr ""
+msgstr "\"{timezone}\" μκ°λμ λν μ ν¨νμ§ μμ datetime μ
λλ€."
-#: fields.py:1151
+#: fields.py:1132
msgid "Datetime value out of range."
-msgstr ""
+msgstr "Datetime κ°μ΄ λ²μλ₯Ό λ²μ΄λ¬μ΅λλ€."
-#: fields.py:1236
+#: fields.py:1219
#, python-brace-format
msgid "Date has wrong format. Use one of these formats instead: {format}."
msgstr "Dateμ ν¬λ©§μ΄ μλͺ»λμμ΅λλ€. μ΄ νμλ€ μ€ νκ°μ§λ₯Ό μ¬μ©νμΈμ: {format}."
-#: fields.py:1237
+#: fields.py:1220
msgid "Expected a date but got a datetime."
msgstr "μμλ date λμ datetimeμ λ°μμ΅λλ€."
-#: fields.py:1303
+#: fields.py:1286
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
msgstr "Timeμ ν¬λ©§μ΄ μλͺ»λμμ΅λλ€. μ΄ νμλ€ μ€ νκ°μ§λ₯Ό μ¬μ©νμΈμ: {format}."
-#: fields.py:1365
+#: fields.py:1348
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
msgstr "Durationμ ν¬λ©§μ΄ μλͺ»λμμ΅λλ€. μ΄ νμλ€ μ€ νκ°μ§λ₯Ό μ¬μ©νμΈμ: {format}."
-#: fields.py:1399 fields.py:1456
+#: fields.py:1351
+#, python-brace-format
+msgid "The number of days must be between {min_days} and {max_days}."
+msgstr "μΌμλ {min_days} μ΄μ {max_days} μ΄νμ΄μ΄μΌ ν©λλ€."
+
+#: fields.py:1386 fields.py:1446
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
-msgstr "\"{input}\"μ΄ μ ν¨νμ§ μμ μ ν(choice)μ
λλ€."
+msgstr "\"{input}\"μ μ ν¨νμ§ μμ μ νμ
λλ€."
-#: fields.py:1402
+#: fields.py:1389
#, python-brace-format
msgid "More than {count} items..."
-msgstr ""
+msgstr "{count}κ° μ΄μμ μμ΄ν
μ΄ μμ΅λλ€..."
-#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570
+#: fields.py:1447 fields.py:1596 relations.py:486 serializers.py:593
#, python-brace-format
msgid "Expected a list of items but got type \"{input_type}\"."
msgstr "μμ΄ν
리μ€νΈκ° μμλμμΌλ \"{input_type}\"λ₯Ό λ°μμ΅λλ€."
-#: fields.py:1458
+#: fields.py:1448
msgid "This selection may not be empty."
msgstr "μ΄ μ ν νλͺ©μ λΉμ λ μ μμ΅λλ€."
-#: fields.py:1495
+#: fields.py:1487
#, python-brace-format
msgid "\"{input}\" is not a valid path choice."
-msgstr "\"{input}\"μ΄ μ ν¨νμ§ μμ κ²½λ‘ μ νμ
λλ€."
+msgstr "\"{input}\"μ μ ν¨νμ§ μμ κ²½λ‘ μ νμ
λλ€."
-#: fields.py:1514
+#: fields.py:1507
msgid "No file was submitted."
msgstr "νμΌμ΄ μ μΆλμ§ μμμ΅λλ€."
-#: fields.py:1515
-msgid ""
-"The submitted data was not a file. Check the encoding type on the form."
+#: fields.py:1508
+msgid "The submitted data was not a file. Check the encoding type on the form."
msgstr "μ μΆλ λ°μ΄ν°λ νμΌμ΄ μλλλ€. μ μΆλ μμμ μΈμ½λ© νμμ νμΈνμΈμ."
-#: fields.py:1516
+#: fields.py:1509
msgid "No filename could be determined."
msgstr "νμΌλͺ
μ μ μ μμ΅λλ€."
-#: fields.py:1517
+#: fields.py:1510
msgid "The submitted file is empty."
msgstr "μ μΆν νμΌμ΄ λΉμ΄μμ΅λλ€."
-#: fields.py:1518
+#: fields.py:1511
#, python-brace-format
msgid ""
"Ensure this filename has at most {max_length} characters (it has {length})."
-msgstr "μ΄ νμΌλͺ
μ κΈμμκ° μ΅λ {max_length}λ₯Ό λμ§ μλμ§ νμΈνμμμ€. (μ΄κ²μ {length}κ° μμ΅λλ€)."
+msgstr "μ΄ νμΌλͺ
μ κΈμμκ° μ΅λ {max_length}μλ₯Ό λμ§ μλμ§ νμΈνμΈμ. (νμ¬ {length}μμ
λλ€)."
-#: fields.py:1566
+#: fields.py:1559
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
-msgstr "μ ν¨ν μ΄λ―Έμ§ νμΌμ μ
λ‘λ νμμμ€. μ
λ‘λ νμ νμΌμ μ΄λ―Έμ§ νμΌμ΄ μλκ±°λ μμλ μ΄λ―Έμ§ νμΌμ
λλ€."
+msgstr "μ ν¨ν μ΄λ―Έμ§ νμΌμ μ
λ‘λνμΈμ. μ
λ‘λνμ νμΌμ μ΄λ―Έμ§ νμΌμ΄ μλκ±°λ μμλ μ΄λ―Έμ§ νμΌμ
λλ€."
-#: fields.py:1604 relations.py:486 serializers.py:571
+#: fields.py:1597 relations.py:487 serializers.py:594
msgid "This list may not be empty."
msgstr "μ΄ λ¦¬μ€νΈλ λΉμ λ μ μμ΅λλ€."
-#: fields.py:1605
+#: fields.py:1598 serializers.py:596
#, python-brace-format
msgid "Ensure this field has at least {min_length} elements."
-msgstr ""
+msgstr "μ΄ νλκ° μ΅μ {min_length} κ°μ μμλ₯Ό κ°μ§λμ§ νμΈνμΈμ."
-#: fields.py:1606
+#: fields.py:1599 serializers.py:595
#, python-brace-format
msgid "Ensure this field has no more than {max_length} elements."
-msgstr ""
+msgstr "μ΄ νλκ° μ΅λ {max_length} κ°μ μμλ₯Ό κ°μ§λμ§ νμΈνμΈμ."
-#: fields.py:1682
+#: fields.py:1677
#, python-brace-format
msgid "Expected a dictionary of items but got type \"{input_type}\"."
msgstr "μμ΄ν
λμ
λλ¦¬κ° μμλμμΌλ \"{input_type}\" νμ
μ λ°μμ΅λλ€."
-#: fields.py:1683
+#: fields.py:1678
msgid "This dictionary may not be empty."
-msgstr ""
+msgstr "μ΄ λμ
λ리λ λΉμ΄μμ μ μμ΅λλ€."
-#: fields.py:1755
+#: fields.py:1750
msgid "Value must be valid JSON."
-msgstr "Value λ μ ν¨ν JSONνμμ΄μ΄μΌ ν©λλ€."
+msgstr "μ ν¨ν JSON κ°μ΄μ΄μΌ ν©λλ€."
-#: filters.py:49 templates/rest_framework/filters/search.html:2
+#: filters.py:72 templates/rest_framework/filters/search.html:2
+#: templates/rest_framework/filters/search.html:8
msgid "Search"
msgstr "κ²μ"
-#: filters.py:50
+#: filters.py:73
msgid "A search term."
-msgstr ""
+msgstr "κ²μμ΄."
-#: filters.py:180 templates/rest_framework/filters/ordering.html:3
+#: filters.py:224 templates/rest_framework/filters/ordering.html:3
msgid "Ordering"
msgstr "μμ"
-#: filters.py:181
+#: filters.py:225
msgid "Which field to use when ordering the results."
-msgstr ""
+msgstr "κ²°κ³Ό μ λ ¬ μ μ¬μ©ν νλ."
-#: filters.py:287
+#: filters.py:341
msgid "ascending"
msgstr "μ€λ¦μ°¨μ"
-#: filters.py:288
+#: filters.py:342
msgid "descending"
msgstr "λ΄λ¦Όμ°¨μ"
-#: pagination.py:174
+#: pagination.py:180
msgid "A page number within the paginated result set."
-msgstr ""
+msgstr "νμ΄μ§λ€μ΄μ
λ κ²°κ³Ό μ§ν© λ΄μ νμ΄μ§ λ²νΈ."
-#: pagination.py:179 pagination.py:372 pagination.py:590
+#: pagination.py:185 pagination.py:382 pagination.py:599
msgid "Number of results to return per page."
-msgstr ""
+msgstr "νμ΄μ§λΉ λ°νν κ²°κ³Ό μ."
-#: pagination.py:189
+#: pagination.py:195
msgid "Invalid page."
msgstr "νμ΄μ§κ° μ ν¨νμ§ μμ΅λλ€."
-#: pagination.py:374
+#: pagination.py:384
msgid "The initial index from which to return the results."
-msgstr ""
+msgstr "κ²°κ³Όλ₯Ό λ°νν μ΄κΈ° μΈλ±μ€."
-#: pagination.py:581
+#: pagination.py:590
msgid "The pagination cursor value."
-msgstr ""
+msgstr "νμ΄μ§λ€μ΄μ
컀μ κ°."
-#: pagination.py:583
+#: pagination.py:592
msgid "Invalid cursor"
-msgstr "컀μ(cursor)κ° μ ν¨νμ§ μμ΅λλ€."
+msgstr "컀μκ° μ ν¨νμ§ μμ΅λλ€."
-#: relations.py:246
+#: relations.py:241
#, python-brace-format
msgid "Invalid pk \"{pk_value}\" - object does not exist."
msgstr "μ ν¨νμ§ μμ pk \"{pk_value}\" - κ°μ²΄κ° μ‘΄μ¬νμ§ μμ΅λλ€."
-#: relations.py:247
+#: relations.py:242
#, python-brace-format
msgid "Incorrect type. Expected pk value, received {data_type}."
-msgstr "μλͺ»λ νμμ
λλ€. pk κ° λμ {data_type}λ₯Ό λ°μμ΅λλ€."
+msgstr "μλͺ»λ νμμ
λλ€. pk κ°μ΄ μμλμμ§λ§, {data_type}μ(λ₯Ό) λ°μμ΅λλ€."
-#: relations.py:280
+#: relations.py:277
msgid "Invalid hyperlink - No URL match."
msgstr "μ ν¨νμ§ μμ νμ΄νΌλ§ν¬ - μΌμΉνλ URLμ΄ μμ΅λλ€."
-#: relations.py:281
+#: relations.py:278
msgid "Invalid hyperlink - Incorrect URL match."
msgstr "μ ν¨νμ§ μμ νμ΄νΌλ§ν¬ - URLμ΄ μΌμΉνμ§ μμ΅λλ€."
-#: relations.py:282
+#: relations.py:279
msgid "Invalid hyperlink - Object does not exist."
msgstr "μ ν¨νμ§ μμ νμ΄νΌλ§ν¬ - κ°μ²΄κ° μ‘΄μ¬νμ§ μμ΅λλ€."
-#: relations.py:283
+#: relations.py:280
#, python-brace-format
msgid "Incorrect type. Expected URL string, received {data_type}."
msgstr "μλͺ»λ νμμ
λλ€. URL λ¬Έμμ΄μ μμνμΌλ {data_type}μ λ°μμ΅λλ€."
-#: relations.py:448
+#: relations.py:445
#, python-brace-format
msgid "Object with {slug_name}={value} does not exist."
msgstr "{slug_name}={value} κ°μ²΄κ° μ‘΄μ¬νμ§ μμ΅λλ€."
-#: relations.py:449
+#: relations.py:446
msgid "Invalid value."
msgstr "κ°μ΄ μ ν¨νμ§ μμ΅λλ€."
#: schemas/utils.py:32
msgid "unique integer value"
-msgstr ""
+msgstr "κ³ μ ν μ μ κ°"
#: schemas/utils.py:34
msgid "UUID string"
-msgstr ""
+msgstr "UUID λ¬Έμμ΄"
#: schemas/utils.py:36
msgid "unique value"
-msgstr ""
+msgstr "κ³ μ ν κ°"
#: schemas/utils.py:38
#, python-brace-format
msgid "A {value_type} identifying this {name}."
-msgstr ""
+msgstr "{name}μ μλ³νλ {value_type}."
-#: serializers.py:337
+#: serializers.py:340
#, python-brace-format
msgid "Invalid data. Expected a dictionary, but got {datatype}."
msgstr "μ ν¨νμ§ μμ λ°μ΄ν°. λμ
λ리(dictionary)λμ {datatype}λ₯Ό λ°μμ΅λλ€."
@@ -483,7 +491,7 @@ msgstr "μ ν¨νμ§ μμ λ°μ΄ν°. λμ
λ리(dictionary)λμ {datatype}
#: templates/rest_framework/admin.html:116
#: templates/rest_framework/base.html:136
msgid "Extra Actions"
-msgstr ""
+msgstr "μΆκ° Actionλ€"
#: templates/rest_framework/admin.html:130
#: templates/rest_framework/base.html:150
@@ -492,33 +500,33 @@ msgstr "νν°"
#: templates/rest_framework/base.html:37
msgid "navbar"
-msgstr ""
+msgstr "λ€λΉκ²μ΄μ
λ°"
#: templates/rest_framework/base.html:75
msgid "content"
-msgstr ""
+msgstr "μ½ν
μΈ "
#: templates/rest_framework/base.html:78
msgid "request form"
-msgstr ""
+msgstr "μμ² νΌ"
#: templates/rest_framework/base.html:157
msgid "main content"
-msgstr ""
+msgstr "λ©μΈ μ½ν
μΈ "
#: templates/rest_framework/base.html:173
msgid "request info"
-msgstr ""
+msgstr "μμ² μ 보"
#: templates/rest_framework/base.html:177
msgid "response info"
-msgstr ""
+msgstr "μλ΅ μ 보"
#: templates/rest_framework/horizontal/radio.html:4
#: templates/rest_framework/inline/radio.html:3
#: templates/rest_framework/vertical/radio.html:3
msgid "None"
-msgstr ""
+msgstr "μμ"
#: templates/rest_framework/horizontal/select_multiple.html:4
#: templates/rest_framework/inline/select_multiple.html:3
@@ -528,49 +536,49 @@ msgstr "μ νν μμ΄ν
μ΄ μμ΅λλ€."
#: validators.py:39
msgid "This field must be unique."
-msgstr "μ΄ νλλ λ°λμ κ³ μ (unique)ν΄μΌ ν©λλ€."
+msgstr "μ΄ νλλ λ°λμ κ³ μ ν΄μΌ ν©λλ€."
-#: validators.py:89
+#: validators.py:98
#, python-brace-format
msgid "The fields {field_names} must make a unique set."
-msgstr "νλ {field_names} λ λ°λμ κ³ μ (unique)ν΄μΌ ν©λλ€."
+msgstr "νλ {field_names} λ λ°λμ κ³ μ ν΄μΌ ν©λλ€."
-#: validators.py:171
+#: validators.py:200
#, python-brace-format
msgid "Surrogate characters are not allowed: U+{code_point:X}."
-msgstr ""
+msgstr "λ체(surrogate) λ¬Έμλ νμ©λμ§ μμ΅λλ€: U+{code_point:X}."
-#: validators.py:243
+#: validators.py:290
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" date."
-msgstr "μ΄ νλλ κ³ μ (unique)ν \"{date_field}\" λ μ§λ₯Ό κ°μ΅λλ€."
+msgstr "μ΄ νλλ \"{date_field}\" λ μ§μ λν΄ κ³ μ ν΄μΌ ν©λλ€."
-#: validators.py:258
+#: validators.py:305
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" month."
-msgstr "μ΄ νλλ κ³ μ (unique)ν \"{date_field}\" μμ κ°μ΅λλ€.Β "
+msgstr "μ΄ νλλ \"{date_field}\" μμ λν΄ κ³ μ ν΄μΌ ν©λλ€."
-#: validators.py:271
+#: validators.py:318
#, python-brace-format
msgid "This field must be unique for the \"{date_field}\" year."
-msgstr "μ΄ νλλ κ³ μ (unique)ν \"{date_field}\" λ
μ κ°μ΅λλ€. "
+msgstr "μ΄ νλλ \"{date_field}\" μ°λμ λν΄ κ³ μ ν΄μΌ ν©λλ€."
#: versioning.py:40
msgid "Invalid version in \"Accept\" header."
-msgstr "\"Accept\" ν€λ(header)μ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
+msgstr "\"Accept\" ν€λμ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
#: versioning.py:71
msgid "Invalid version in URL path."
-msgstr "URL pathμ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
+msgstr "URL κ²½λ‘μ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
-#: versioning.py:116
+#: versioning.py:118
msgid "Invalid version in URL path. Does not match any version namespace."
-msgstr "URL κ²½λ‘μ μ ν¨νμ§ μμ λ²μ μ΄ μμ΅λλ€. λ²μ λ€μ μ€νμ΄μ€μ μΌμΉνμ§ μμ΅λλ€."
+msgstr "URL κ²½λ‘μ μ ν¨νμ§ μμ λ²μ μ΄ μμ΅λλ€. λ²μ λ€μμ€νμ΄μ€μ μΌμΉνμ§ μμ΅λλ€."
-#: versioning.py:148
+#: versioning.py:150
msgid "Invalid version in hostname."
-msgstr "hostnameλ΄ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
+msgstr "hostname λ΄ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
-#: versioning.py:170
+#: versioning.py:172
msgid "Invalid version in query parameter."
-msgstr "쿼리 νλΌλ©ν°λ΄ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
+msgstr "쿼리 νλΌλ©ν° λ΄ λ²μ μ΄ μ ν¨νμ§ μμ΅λλ€."
diff --git a/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo b/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo
index 5a6e3788e..03a0651fa 100644
Binary files a/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo and b/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo differ
diff --git a/rest_framework/locale/pt_BR/LC_MESSAGES/django.po b/rest_framework/locale/pt_BR/LC_MESSAGES/django.po
index 4d47ce3b9..bfd53ee0f 100644
--- a/rest_framework/locale/pt_BR/LC_MESSAGES/django.po
+++ b/rest_framework/locale/pt_BR/LC_MESSAGES/django.po
@@ -1,7 +1,7 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
# Cloves Oliveira , 2020
# Craig Blaszczyk , 2015
@@ -10,6 +10,7 @@
# Hugo Leonardo Chalhoub MendonΓ§a , 2015
# Jonatas Baldin , 2017
# Gabriel Mitelman Tkacz , 2024
+# Matheus Oliveira , 2025
msgid ""
msgstr ""
"Project-Id-Version: Django REST framework\n"
@@ -141,7 +142,7 @@ msgstr "NΓ£o foi possΓvel satisfazer a requisiΓ§Γ£o do cabeΓ§alho Accept."
#: exceptions.py:212
#, python-brace-format
msgid "Unsupported media type \"{media_type}\" in request."
-msgstr "Tipo de mΓdia \"{media_type}\" no pedido nΓ£o Γ© suportado."
+msgstr "Tipo de mΓdia \"{media_type}\" no pedido nΓ£o Γ© suportado."
#: exceptions.py:223
msgid "Request was throttled."
@@ -200,17 +201,17 @@ msgstr "Este valor nΓ£o corresponde ao padrΓ£o exigido."
msgid ""
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
"hyphens."
-msgstr "Entrar um \"slug\" vΓ‘lido que consista de letras, nΓΊmeros, sublinhados ou hΓfens."
+msgstr "Insira um \"slug\" vΓ‘lido que consista de letras, nΓΊmeros, sublinhados ou hΓfens."
#: fields.py:839
msgid ""
"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, "
"or hyphens."
-msgstr "Digite um \"slug\" vΓ‘lido que consista de letras Unicode, nΓΊmeros, sublinhados ou hΓfens."
+msgstr "Insira um \"slug\" vΓ‘lido que consista de letras Unicode, nΓΊmeros, sublinhados ou hΓfens."
#: fields.py:854
msgid "Enter a valid URL."
-msgstr "Entrar um URL vΓ‘lido."
+msgstr "Insira um URL vΓ‘lido."
#: fields.py:867
msgid "Must be a valid UUID."
@@ -290,12 +291,12 @@ msgstr "NecessΓ‘rio uma data mas recebeu uma data e hora."
#: fields.py:1303
#, python-brace-format
msgid "Time has wrong format. Use one of these formats instead: {format}."
-msgstr "Formato invΓ‘lido para Tempo. Use um dos formatos a seguir: {format}."
+msgstr "Formato invΓ‘lido para tempo. Use um dos formatos a seguir: {format}."
#: fields.py:1365
#, python-brace-format
msgid "Duration has wrong format. Use one of these formats instead: {format}."
-msgstr "Formato invΓ‘lido para DuraΓ§Γ£o. Use um dos formatos a seguir: {format}."
+msgstr "Formato invΓ‘lido para duraΓ§Γ£o. Use um dos formatos a seguir: {format}."
#: fields.py:1399 fields.py:1456
#, python-brace-format
@@ -348,7 +349,7 @@ msgstr "Certifique-se de que o nome do arquivo tem menos de {max_length} caracte
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
-msgstr "Fazer upload de uma imagem vΓ‘lida. O arquivo enviado nΓ£o Γ© um arquivo de imagem ou estΓ‘ corrompido."
+msgstr "FaΓ§a upload de uma imagem vΓ‘lida. O arquivo enviado nΓ£o Γ© um arquivo de imagem ou estΓ‘ corrompido."
#: fields.py:1604 relations.py:486 serializers.py:571
msgid "This list may not be empty."
@@ -375,7 +376,7 @@ msgstr "Este dicionΓ‘rio nΓ£o pode estar vazio."
#: fields.py:1755
msgid "Value must be valid JSON."
-msgstr "Valor devo ser JSON vΓ‘lido."
+msgstr "Valor deve ser JSON vΓ‘lido."
#: filters.py:49 templates/rest_framework/filters/search.html:2
msgid "Search"
@@ -395,11 +396,11 @@ msgstr "Qual campo usar ao ordenar os resultados."
#: filters.py:287
msgid "ascending"
-msgstr "ascendente"
+msgstr "crescente"
#: filters.py:288
msgid "descending"
-msgstr "descendente"
+msgstr "decrescente"
#: pagination.py:174
msgid "A page number within the paginated result set."
@@ -531,7 +532,7 @@ msgstr "Nenhum item para escholher."
#: validators.py:39
msgid "This field must be unique."
-msgstr "Esse campo deve ser ΓΊnico."
+msgstr "Esse campo deve ser ΓΊnico."
#: validators.py:89
#, python-brace-format
diff --git a/setup.py b/setup.py
index f80dcff2c..952b5f50a 100755
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,7 @@ import sys
from setuptools import find_packages, setup
CURRENT_PYTHON = sys.version_info[:2]
-REQUIRED_PYTHON = (3, 8)
+REQUIRED_PYTHON = (3, 9)
# This check and everything above must remain compatible with Python 2.7.
if CURRENT_PYTHON < REQUIRED_PYTHON:
@@ -82,7 +82,7 @@ setup(
packages=find_packages(exclude=['tests*']),
include_package_data=True,
install_requires=["django>=4.2", 'backports.zoneinfo;python_version<"3.9"'],
- python_requires=">=3.8",
+ python_requires=">=3.9",
zip_safe=False,
classifiers=[
'Development Status :: 5 - Production/Stable',
@@ -97,7 +97,6 @@ setup(
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
diff --git a/tox.ini b/tox.ini
index b0bd54219..032d4a18e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
[tox]
envlist =
- {py38,py39}-{django42}
+ {py39}-{django42}
{py310}-{django42,django51,django52,djangomain}
{py311}-{django42,django51,django52,djangomain}
{py312}-{django42,django51,django52,djangomain}