declaring ``PAPERLESS_DBUSER`` in your environment. This will attempt to
connect to your Postgres database without a password unless you also set
``PAPERLESS_DBPASS``.
+* A bug was found in the REST API filter system that was the result of an
+ update of django-filter some time ago. This has now been patched `#412`_.
+ Thanks to `thepill`_ for spotting it!
+
2.3.0
=====
.. _dubit0: https://github.com/dubit0
.. _ahyear: https://github.com/ahyear
.. _jonaswinkler: https://github.com/jonaswinkler
+.. _thepill: https://github.com/thepill
.. _#20: https://github.com/danielquinn/paperless/issues/20
.. _#44: https://github.com/danielquinn/paperless/issues/44
.. _#400: https://github.com/danielquinn/paperless/pull/400
.. _#401: https://github.com/danielquinn/paperless/pull/401
.. _#405: https://github.com/danielquinn/paperless/pull/405
+.. _#412: https://github.com/danielquinn/paperless/issues/412
.. _pipenv: https://docs.pipenv.org/
.. _a new home on Docker Hub: https://hub.docker.com/r/danielquinn/paperless/
-from django_filters.rest_framework import CharFilter, FilterSet, BooleanFilter
+from django_filters.rest_framework import CharFilter, FilterSet, BooleanFilter, ModelChoiceFilter
from .models import Correspondent, Document, Tag
+CHAR_KWARGS = (
+ "startswith", "endswith", "contains",
+ "istartswith", "iendswith", "icontains"
+)
+
+
class CorrespondentFilterSet(FilterSet):
class Meta:
class DocumentFilterSet(FilterSet):
- CHAR_KWARGS = {
- "lookup_expr": (
- "startswith",
- "endswith",
- "contains",
- "istartswith",
- "iendswith",
- "icontains"
- )
- }
-
- correspondent__name = CharFilter(
- field_name="correspondent__name", **CHAR_KWARGS)
- correspondent__slug = CharFilter(
- field_name="correspondent__slug", **CHAR_KWARGS)
- tags__name = CharFilter(
- field_name="tags__name", **CHAR_KWARGS)
- tags__slug = CharFilter(
- field_name="tags__slug", **CHAR_KWARGS)
- tags__empty = BooleanFilter(
- field_name="tags", lookup_expr="isnull", distinct=True)
+ tags_empty = BooleanFilter(
+ label="Is tagged",
+ field_name="tags",
+ lookup_expr="isnull",
+ exclude=True
+ )
class Meta:
model = Document
fields = {
- "title": [
- "startswith", "endswith", "contains",
- "istartswith", "iendswith", "icontains"
- ],
- "content": ["contains", "icontains"],
+
+ "title": CHAR_KWARGS,
+ "content": ("contains", "icontains"),
+
+ "correspondent__name": CHAR_KWARGS,
+ "correspondent__slug": CHAR_KWARGS,
+
+ "tags__name": CHAR_KWARGS,
+ "tags__slug": CHAR_KWARGS,
+
}