Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-django-filter for 
openSUSE:Factory checked in at 2026-01-22 17:59:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-filter (Old)
 and      /work/SRC/openSUSE:Factory/.python-django-filter.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-django-filter"

Thu Jan 22 17:59:14 2026 rev:17 rq:1328709 version:25.2

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-django-filter/python-django-filter.changes    
    2025-05-02 14:58:08.114659915 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-django-filter.new.1928/python-django-filter.changes
      2026-01-22 17:59:23.371592559 +0100
@@ -1,0 +2,8 @@
+Thu Jan 22 14:37:07 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 25.2:
+  * Added testing for Django 6.0.
+  * Dropped support for Django <5.2 LTS
+  * Dropped support for Python 3.9.
+
+-------------------------------------------------------------------

Old:
----
  django_filter-25.1.tar.gz

New:
----
  django_filter-25.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-django-filter.spec ++++++
--- /var/tmp/diff_new_pack.pmiotx/_old  2026-01-22 17:59:25.359675494 +0100
+++ /var/tmp/diff_new_pack.pmiotx/_new  2026-01-22 17:59:25.375676162 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-django-filter
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-django-filter
-Version:        25.1
+Version:        25.2
 Release:        0
 Summary:        Reusable Django app to allow users to filter queryset 
dynamically
 License:        BSD-3-Clause

++++++ django_filter-25.1.tar.gz -> django_filter-25.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/.github/workflows/tests.yml 
new/django_filter-25.2/.github/workflows/tests.yml
--- old/django_filter-25.1/.github/workflows/tests.yml  2024-12-28 
11:05:42.058016800 +0100
+++ new/django_filter-25.2/.github/workflows/tests.yml  2025-10-05 
11:41:35.203258000 +0200
@@ -13,12 +13,12 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
+        python-version: ["3.10", "3.11", "3.12", "3.13"]
 
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v5
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@v6
         with:
           python-version: ${{ matrix.python-version }}
       - name: Ensure latest setuptools
@@ -63,9 +63,9 @@
       pull-requests: write
       contents: write
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v5
 
-      - uses: actions/download-artifact@v4
+      - uses: actions/download-artifact@v5
         id: download
         with:
           pattern: coverage-*
@@ -88,9 +88,9 @@
   isort:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v5
       - name: Set up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@v6
         with:
           python-version: "3.13"
       - name: Ensure latest setuptools
@@ -109,9 +109,9 @@
   warnings:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v5
       - name: Set up Python
-        uses: actions/setup-python@v5
+        uses: actions/setup-python@v6
         with:
           python-version: "3.13"
       - name: Ensure latest setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/.gitignore 
new/django_filter-25.2/.gitignore
--- old/django_filter-25.1/.gitignore   2023-12-04 16:17:21.875263700 +0100
+++ new/django_filter-25.2/.gitignore   2025-10-05 11:38:54.308145000 +0200
@@ -12,3 +12,5 @@
 .idea
 .env
 .vscode
+_docs
+.DS_Store
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/CHANGES.rst 
new/django_filter-25.2/CHANGES.rst
--- old/django_filter-25.1/CHANGES.rst  2025-02-14 17:30:19.678902000 +0100
+++ new/django_filter-25.2/CHANGES.rst  2025-10-05 11:44:34.223698900 +0200
@@ -1,3 +1,12 @@
+Version 25.2 (UNRELEASED)
+-------------------------
+
+* Added testing for Django 6.0.
+
+* Dropped support for Django <5.2 LTS
+
+* Dropped support for Python 3.9.
+
 Version 25.1 (2025-02-14)
 -------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/PKG-INFO 
new/django_filter-25.2/PKG-INFO
--- old/django_filter-25.1/PKG-INFO     1970-01-01 01:00:00.000000000 +0100
+++ new/django_filter-25.2/PKG-INFO     1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +1,10 @@
 Metadata-Version: 2.1
 Name: django-filter
-Version: 25.1
+Version: 25.2
 Summary: Django-filter is a reusable Django application for allowing users to 
filter querysets dynamically.
 Author-email: Alex Gaynor <[email protected]>
 Maintainer-email: Carlton Gibson <[email protected]>
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 Description-Content-Type: text/x-rst
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Web Environment
@@ -12,22 +12,22 @@
 Classifier: License :: OSI Approved :: BSD License
 Classifier: Operating System :: OS Independent
 Classifier: Framework :: Django
-Classifier: Framework :: Django :: 4.2
-Classifier: Framework :: Django :: 5.0
-Classifier: Framework :: Django :: 5.1
 Classifier: Framework :: Django :: 5.2
+Classifier: Framework :: Django :: 6.0
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
-Requires-Dist: Django>=4.2
+Classifier: Programming Language :: Python :: 3.13
+Requires-Dist: Django>=5.2
+Requires-Dist: djangorestframework ; extra == "drf"
 Project-URL: Bug Tracker, https://github.com/carltongibson/django-filter/issues
 Project-URL: Changelog, 
https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst
 Project-URL: Documentation, https://django-filter.readthedocs.io/en/main/
 Project-URL: Homepage, https://github.com/carltongibson/django-filter/tree/main
 Project-URL: Source Code, https://github.com/carltongibson/django-filter
+Provides-Extra: drf
 
 Django Filter
 =============
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/django_filters/__init__.py 
new/django_filter-25.2/django_filters/__init__.py
--- old/django_filter-25.1/django_filters/__init__.py   2024-12-28 
11:05:42.058471700 +0100
+++ new/django_filter-25.2/django_filters/__init__.py   2025-10-05 
11:50:56.992887000 +0200
@@ -10,7 +10,7 @@
     from . import rest_framework
 del importlib_util
 
-__version__ = "25.1"
+__version__ = "25.2"
 
 
 def parse_version(version):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/docs/conf.py 
new/django_filter-25.2/docs/conf.py
--- old/django_filter-25.1/docs/conf.py 2023-12-04 16:17:34.095506200 +0100
+++ new/django_filter-25.2/docs/conf.py 2025-10-05 11:38:54.309117000 +0200
@@ -28,7 +28,9 @@
 
 # Add any Sphinx extension module names here, as strings. They can be 
extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = []
+extensions = [
+    "sphinx.ext.intersphinx"
+]
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ["_templates"]
@@ -257,3 +259,15 @@
 
 # How to display URL addresses: 'footnote', 'no', or 'inline'.
 # texinfo_show_urls = 'footnote'
+
+
+intersphinx_mapping = {
+    "django": (
+        "https://docs.djangoproject.com/en/stable";,
+        "https://docs.djangoproject.com/en/stable/_objects/";,
+    ),
+    "python": ('https://docs.python.org/3', None)
+}
+
+# elide module names in class headings
+add_module_names = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/docs/guide/tips.txt 
new/django_filter-25.2/docs/guide/tips.txt
--- old/django_filter-25.1/docs/guide/tips.txt  2023-12-04 16:17:34.095669700 
+0100
+++ new/django_filter-25.2/docs/guide/tips.txt  2025-10-05 11:38:54.310138000 
+0200
@@ -299,3 +299,60 @@
           filter = super(HelpfulFilterSet, cls).filter_for_field(f, name, 
lookup_expr)
           filter.extra['help_text'] = f.help_text
           return filter
+
+Adding Postgres Native Full Text Search
+---------------------------------------
+
+Django-Filter does not provide a built-in filter for PostgreSQL Full-Text 
Search. However, 
+you can enable full-text search functionality in two ways:
+
+1. By adding ``Filter.method``. This approach is useful for one-off instances 
where you need 
+   a simple search filter.
+
+2. Writing a custom Filter. This approach is more reusable and works well when 
you can generalize 
+   the query for multiple cases.
+
+Solution 1: Use the ``Filter.method`` feature
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: python
+
+    from django.contrib.postgres.search import SearchVector, SearchQuery
+
+    class ProductFilter(django_filters.FilterSet):
+        # The model `field_name` is the field you want to search on and is 
passed to your `method`.
+        # The `method` argument is the name of the method to call to perform 
filtering.
+        search = django_filters.CharFilter(field_name="description", 
method="search_fulltext")
+
+        def search_fulltext(self, queryset, field_name, value):
+            if not value:
+                return queryset
+            return queryset.annotate(
+                search=SearchVector("name", "description")
+            ).filter(search=SearchQuery(value))
+
+        class Meta:
+            model = Product
+            fields = ["search", "price", "manufacturer"]
+
+Solution 2: Write a new filter class
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: python
+
+    from django.contrib.postgres.search import SearchVector, SearchQuery
+
+    class FullTextSearchFilter(django_filters.CharFilter):
+        def filter(self, queryset, value):
+            if not value:
+                return queryset
+            return queryset.annotate(
+                search=SearchVector("name", "description")
+            ).filter(search=SearchQuery(value))
+
+    class ProductFilter(django_filters.FilterSet):
+        search = FullTextSearchFilter(field_name="description")
+
+        class Meta:
+            model = Product
+            fields = ["search", "price", "manufacturer"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/docs/guide/usage.txt 
new/django_filter-25.2/docs/guide/usage.txt
--- old/django_filter-25.1/docs/guide/usage.txt 2023-03-26 11:29:15.081597000 
+0200
+++ new/django_filter-25.2/docs/guide/usage.txt 2025-10-05 11:38:54.310603900 
+0200
@@ -29,7 +29,7 @@
 ----------
 
 We have a number of fields and we want to let our users filter based on the
-name, the price or the release_date.  We create a ``FilterSet`` for this::
+name, the price or the release_date.  We create a 
:class:`~django_filters.filterset.FilterSet` for this::
 
     import django_filters
 
@@ -41,8 +41,8 @@
             fields = ['price', 'release_date']
 
 
-As you can see this uses a very similar API to Django's ``ModelForm``.  Just
-like with a ``ModelForm`` we can also override filters, or add new ones using a
+As you can see this uses a very similar API to Django's 
:class:`~django.forms.ModelForm`. Just
+like with a :class:`~django.forms.ModelForm` we can also override filters, or 
add new ones using a
 declarative syntax.
 
 Declaring filters
@@ -50,7 +50,8 @@
 
 The declarative syntax provides you with the most flexibility when creating
 filters, however it is fairly verbose. We'll use the below example to outline
-the :ref:`core filter arguments <core-arguments>` on a ``FilterSet``::
+the :ref:`core filter arguments <core-arguments>` on a 
:class:`~django_filters.filterset.FilterSet`::
+
 
     class ProductFilter(django_filters.FilterSet):
         price = django_filters.NumberFilter()
@@ -72,18 +73,15 @@
 - ``field_name``: The name of the model field to filter on. You can traverse
   "relationship paths" using Django's ``__`` syntax to filter fields on a
   related model. ex, ``manufacturer__name``.
-- ``lookup_expr``: The `field lookup`_ to use when filtering. Django's ``__``
-  syntax can again be used in order to support lookup transforms.
-  ex, ``year__gte``.
+- ``lookup_expr``: The :ref:`field lookup <django:field-lookups>` to use when 
filtering.
+  Django's ``__`` syntax can again be used in order to support lookup 
transforms. ex, ``year__gte``.
 
 .. _`field lookup`: 
https://docs.djangoproject.com/en/stable/ref/models/querysets/#field-lookups
 
 Together, the field ``field_name`` and ``lookup_expr`` represent a complete 
Django
 lookup expression. A detailed explanation of lookup expressions is provided in
-Django's `lookup reference`_. django-filter supports expressions containing
-both transforms and a final lookup.
-
-.. _`lookup reference`: 
https://docs.djangoproject.com/en/stable/ref/models/lookups/#module-django.db.models.lookups
+Django's :mod:`lookup reference <django.db.models.lookups>`. django-filter 
supports
+expressions containing both transforms and a final lookup.
 
 
 Generating filters with Meta.fields
@@ -139,7 +137,7 @@
 Overriding default filters
 """"""""""""""""""""""""""
 
-Like ``django.contrib.admin.ModelAdmin``, it is possible to override
+Like :class:`django.contrib.admin.ModelAdmin`, it is possible to override
 default filters for all the models fields of the same kind using
 ``filter_overrides`` on the ``Meta`` class::
 
@@ -170,10 +168,10 @@
 Request-based filtering
 ~~~~~~~~~~~~~~~~~~~~~~~
 
-The ``FilterSet`` may be initialized with an optional ``request`` argument. If
-a request object is passed, then you may access the request during filtering.
-This allows you to filter by properties on the request, such as the currently
-logged-in user or the ``Accepts-Languages`` header.
+The :class:`~django_filters.filterset.FilterSet` may be initialized with an
+optional ``request`` argument. If a request object is passed, then you may 
access
+the request during filtering. This allows you to filter by properties on the 
request,
+such as the currently logged-in user or the ``Accepts-Languages`` header.
 
 .. note::
 
@@ -209,10 +207,11 @@
 Filtering the related queryset for ``ModelChoiceFilter``
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""
 
-The ``queryset`` argument for ``ModelChoiceFilter`` and 
``ModelMultipleChoiceFilter``
-supports callable behavior. If a callable is passed, it will be invoked with 
the
-``request`` as its only argument. This allows you to perform the same kinds of
-request-based filtering without resorting to overriding ``FilterSet.__init__``.
+The ``queryset`` argument for 
:class:`~django_filters.filters.ModelChoiceFilter` and
+:class:`~django_filters.filters.ModelMultipleChoiceFilter` supports callable 
behavior.
+If a callable is passed, it will be invoked with the ``request`` as its only 
argument.
+This allows you to perform the same kinds of request-based filtering without 
resorting
+to overriding ``FilterSet.__init__``.
 
 .. code-block:: python
 
@@ -277,7 +276,9 @@
 The template
 ------------
 
-And lastly we need a template::
+And lastly we need a template:
+
+.. code-block:: django
 
     {% extends "base.html" %}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/docs/ref/fields.txt 
new/django_filter-25.2/docs/ref/fields.txt
--- old/django_filter-25.1/docs/ref/fields.txt  2021-11-10 10:12:06.459052300 
+0100
+++ new/django_filter-25.2/docs/ref/fields.txt  2025-10-05 11:38:54.311391000 
+0200
@@ -2,22 +2,23 @@
 Field Reference
 ===============
 
-``IsoDateTimeField``
-~~~~~~~~~~~~~~~~~~~~
+.. module:: django_filters.fields
+   :synopsis: Provided form fields and their arguments.
 
-Extends ``django.forms.DateTimeField`` to allow parsing ISO 8601 formated 
dates, in addition to existing formats
+.. currentmodule:: django_filters.fields
+
+.. class:: IsoDateTimeField
+
+Extends :class:`django.forms.DateTimeField` to allow parsing ISO 8601 formated 
dates, in addition to existing formats
 
 Defines a class level attribute ``ISO_8601`` as constant for the format.
 
 Sets ``input_formats = [ISO_8601]`` — this means that by default 
``IsoDateTimeField`` will **only** parse ISO 8601 formated dates.
 
-You may set ``input_formats`` to your list of required formats as per the 
`DateTimeField Docs`_, using the ``ISO_8601`` class level attribute to specify 
the  ISO 8601 format.
+You may set :attr:`~django.forms.DateTimeField.input_formats` to your list of 
required formats as per the :class:`~django.forms.DateTimeField` docs, using 
the ``ISO_8601`` class level attribute to specify the ISO 8601 format.
 
 .. code-block:: python
 
     f = IsoDateTimeField()
     f.input_formats = [IsoDateTimeField.ISO_8601] + DateTimeField.input_formats
 
-
-.. _`DateTimeField Docs`: 
https://docs.djangoproject.com/en/stable/ref/forms/fields/#django.forms.DateTimeField.input_formats
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/docs/ref/filters.txt 
new/django_filter-25.2/docs/ref/filters.txt
--- old/django_filter-25.1/docs/ref/filters.txt 2022-06-16 17:11:02.219039400 
+0200
+++ new/django_filter-25.2/docs/ref/filters.txt 2025-10-05 11:38:54.312126600 
+0200
@@ -2,6 +2,11 @@
 Filter Reference
 ================
 
+.. module:: django_filters.filters
+   :synopsis: Provided filters and their arguments.
+
+.. currentmodule:: django_filters.filters
+
 This is a reference document with a list of the filters and their arguments.
 
 .. _core-arguments:
@@ -10,29 +15,26 @@
 --------------
 
 The following are the core arguments that apply to all filters. Note that they
-are joined to construct the complete `lookup expression`_ that is the left hand
-side of the ORM ``.filter()`` call.
-
-.. _`lookup expression`: 
https://docs.djangoproject.com/en/stable/ref/models/lookups/#module-django.db.models.lookups
+are joined to construct the complete :mod:`lookup expression 
<django.db.models.lookups>`
+that is the left hand side of the ORM 
:meth:`~django.db.models.query.QuerySet.filter` call.
 
 ``field_name``
 ~~~~~~~~~~~~~~
 
 The name of the model field that is filtered against. If this argument is not
-provided, it defaults the filter's attribute name on the ``FilterSet`` class.
-Field names can traverse relationships by joining the related parts with the 
ORM
-lookup separator (``__``). e.g., a product's ``manufacturer__name``.
+provided, it defaults the filter's attribute name on the
+:class:`~django_filters.filterset.FilterSet` class. Field names can traverse 
relationships
+by joining the related parts with the ORM lookup separator (``__``). e.g., a 
product's
+``manufacturer__name``.
 
 ``lookup_expr``
 ~~~~~~~~~~~~~~~
 
-The `field lookup`_ that should be performed in the filter call. Defaults to
-``exact``. The ``lookup_expr`` can contain transforms if the expression parts
+The :ref:`field lookup <django:field-lookups>` that should be performed in the 
filter call.
+Defaults to ``exact``. The ``lookup_expr`` can contain transforms if the 
expression parts
 are joined by the ORM lookup separator (``__``). e.g., filter a datetime by its
 year part ``year__gt``.
 
-.. _`Field lookup`: 
https://docs.djangoproject.com/en/stable/ref/models/querysets/#field-lookups
-
 .. _keyword-only-arguments:
 
 Keyword-only Arguments
@@ -55,9 +57,11 @@
 ~~~~~~~~~~
 
 An optional argument that tells the filter how to handle the queryset. It can
-accept either a callable or the name of a method on the ``FilterSet``. The
-callable receives a ``QuerySet``, the name of the model field to filter on, and
-the value to filter with. It should return a filtered ``Queryset``.
+accept either a callable or the name of a method on the
+:class:`~django_filters.filterset.FilterSet`. The callable receives a
+:class:`~django.db.models.query.QuerySet`, the name of the model field to 
filter
+on, and the value to filter with. It should return a filtered
+:class:`~django.db.models.query.QuerySet`.
 
 Note that the value is validated by the ``Filter.field``, so raw value
 transformation and empty value checking should be unnecessary.
@@ -118,8 +122,8 @@
 ~~~~~~~~~~~~
 
 Any additional keyword arguments are stored as the ``extra`` parameter on the
-filter. They are provided to the accompanying form ``Field`` and can be used to
-provide arguments like ``choices``. Some field-related arguments:
+filter. They are provided to the accompanying form 
:class:`~django.forms.Field` and can be used to
+provide arguments like :attr:`~django.forms.ChoiceField.choices`. Some 
field-related arguments:
 
 ``widget``
 """"""""""
@@ -128,29 +132,31 @@
 to the widgets that are included with Django that you can use there are
 additional ones that django-filter provides which may be useful:
 
-    * :ref:`LinkWidget <link-widget>` -- this displays the options in a manner
+    * :class:`~django_filters.widgets.LinkWidget` -- this displays the options 
in a manner
       similar to the way the Django Admin does, as a series of links. The link
       for the selected option will have ``class="selected"``.
-    * :ref:`BooleanWidget <boolean-widget>` -- this widget converts its input
+    * :class:`~django_filters.widgets.BooleanWidget` -- this widget converts 
its input
       into Python's True/False values. It will convert all case variations of
       ``True`` and ``False`` into the internal Python values.
-    * :ref:`CSVWidget <csv-widget>` -- this widget expects a comma separated
+    * :class:`~django_filters.widgets.CSVWidget` -- this widget expects a 
comma separated
       value and converts it into a list of string values. It is expected that
       the field class handle a list of values as well as type conversion.
-    * :ref:`RangeWidget <range-widget>` -- this widget is used with 
``RangeFilter``
-      to generate two form input elements using a single field.
+    * :class:`~django_filters.widgets.RangeWidget` -- this widget is used with
+      :class:`~django_filters.filters.RangeFilter` to generate two form input 
elements
+      using a single field.
 
 
-ModelChoiceFilter and ModelMultipleChoiceFilter arguments
----------------------------------------------------------
+``ModelChoiceFilter`` and ``ModelMultipleChoiceFilter`` arguments
+-----------------------------------------------------------------
 
-These arguments apply specifically to ModelChoiceFilter and
-ModelMultipleChoiceFilter only.
+These arguments apply specifically to 
:class:`~django_filters.filters.ModelChoiceFilter` and
+:class:`~django_filters.filters.ModelMultipleChoiceFilter` only.
 
-``queryset``
+``QuerySet``
 ~~~~~~~~~~~~
 
-``ModelChoiceFilter`` and ``ModelMultipleChoiceFilter`` require a queryset to
+:class:`~django_filters.filters.ModelChoiceFilter` and
+:class:`~django_filters.filters.ModelMultipleChoiceFilter` require a queryset 
to
 operate on which must be passed as a kwarg.
 
 ``to_field_name``
@@ -164,30 +170,25 @@
 Filters
 -------
 
-``CharFilter``
-~~~~~~~~~~~~~~
+.. class:: CharFilter
 
-This filter does simple character matches, used with ``CharField`` and
-``TextField`` by default.
+This filter does simple character matches, used with 
:class:`~django.db.models.CharField` and
+:class:`~django.db.models.TextField` by default.
 
-``UUIDFilter``
-~~~~~~~~~~~~~~
+.. class:: UUIDFilter
 
-This filter matches UUID values, used with ``models.UUIDField`` by default.
+This filter matches UUID values, used with 
:class:`~django.db.models.UUIDField` by default.
 
-``BooleanFilter``
-~~~~~~~~~~~~~~~~~
+.. class:: BooleanFilter
 
 This filter matches a boolean, either ``True`` or ``False``, used with
-``BooleanField`` and ``NullBooleanField`` by default.
+:class:`~django.db.models.BooleanField` and ``NullBooleanField`` by default.
 
 .. _choice-filter:
-
-``ChoiceFilter``
-~~~~~~~~~~~~~~~~
+.. class:: ChoiceFilter
 
 This filter matches values in its ``choices`` argument. The ``choices`` must be
-explicitly passed when the filter is declared on the ``FilterSet``. For 
example,
+explicitly passed when the filter is declared on the 
:class:`~django_filters.filterset.FilterSet`. For example,
 
 .. code-block:: python
 
@@ -211,9 +212,9 @@
             fields = ['status']
 
 
-``ChoiceFilter`` also has arguments that enable a choice for not filtering, as
-well as a choice for filtering by ``None`` values. Each of the arguments have a
-corresponding global setting (:doc:`/ref/settings`).
+:class:`~django_filters.filters.ChoiceFilter` also has arguments that enable a
+choice for not filtering, as well as a choice for filtering by ``None`` values.
+Each of the arguments have a corresponding global setting 
(:doc:`/ref/settings`).
 
 * ``empty_label``: The display label to use for the select choice to not 
filter.
   The choice may be disabled by setting this argument to ``None``. Defaults to
@@ -226,11 +227,10 @@
   a non-empty value (``''``, ``None``, ``[]``, ``()``, ``{}``).
 
 
-``TypedChoiceFilter``
-~~~~~~~~~~~~~~~~~~~~~
+.. class:: TypedChoiceFilter
 
-The same as ``ChoiceFilter`` with the added possibility to convert value to
-match against. This could be done by using `coerce` parameter.
+The same as :class:`~django_filters.filters.ChoiceFilter` with the added 
possibility
+to convert value to match against. This could be done by using `coerce` 
parameter.
 An example use-case is limiting boolean choices to match against so only
 some predefined strings could be used as input of a boolean filter::
 
@@ -245,11 +245,10 @@
                                                 coerce=strtobool)
 
 
-``MultipleChoiceFilter``
-~~~~~~~~~~~~~~~~~~~~~~~~
+.. class:: MultipleChoiceFilter
 
-The same as ``ChoiceFilter`` except the user can select multiple choices
-and the filter will form the OR of these choices by default to match items.
+The same as :class:`~django_filters.filters.ChoiceFilter` except the user can 
select
+multiple choices and the filter will form the OR of these choices by default 
to match items.
 The filter will form the AND of the selected choices when the 
``conjoined=True``
 argument is passed to this class.
 
@@ -268,36 +267,31 @@
 Override `is_noop` if you require a different test for your application.
 
 
-``TypedMultipleChoiceFilter``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. class:: TypedMultipleChoiceFilter
 
-Like ``MultipleChoiceFilter``, but in addition accepts the ``coerce`` 
parameter, as
-in ``TypedChoiceFilter``.
+Like :class:`~django_filters.filters.MultipleChoiceFilter`, but in addition 
accepts the
+``coerce`` parameter, as in :class:`~django_filters.filters.TypedChoiceFilter`.
 
 
-``DateFilter``
-~~~~~~~~~~~~~~
+.. class:: DateFilter
 
-Matches on a date.  Used with ``DateField`` by default.
+Matches on a date.  Used with :class:`~django.db.models.DateField` by default.
 
 
-``TimeFilter``
-~~~~~~~~~~~~~~
+.. class:: TimeFilter
 
-Matches on a time.  Used with ``TimeField`` by default.
+Matches on a time.  Used with :class:`~django.db.models.TimeField` by default.
 
 
-``DateTimeFilter``
-~~~~~~~~~~~~~~~~~~
+.. class:: DateTimeFilter
 
-Matches on a date and time.  Used with ``DateTimeField`` by default.
+Matches on a date and time.  Used with 
:class:`~django.db.models.DateTimeField` by default.
 
 
-``IsoDateTimeFilter``
-~~~~~~~~~~~~~~~~~~~~~
+.. class:: IsoDateTimeFilter
 
-Uses ``IsoDateTimeField`` to support filtering on ISO 8601 formatted dates, as 
are often
-used in APIs, and are employed by default by Django REST Framework.
+Uses :class:`~django_filters.fields.IsoDateTimeField` to support filtering on 
ISO 8601
+formatted dates, as are often used in APIs, and are employed by default by 
Django REST Framework.
 
 Example::
 
@@ -310,25 +304,23 @@
             fields = ['published']
 
 
-``DurationFilter``
-~~~~~~~~~~~~~~~~~~
+.. class:: DurationFilter
 
-Matches on a duration.  Used with ``DurationField`` by default.
+Matches on a duration. Used with :class:`~django.db.models.DurationField` by 
default.
 
 Supports both Django ('%d %H:%M:%S.%f') and ISO 8601 formatted durations (but
 only the sections that are accepted by Python's timedelta, so no year, month,
 and week designators, e.g. 'P3DT10H22M').
 
 
-``ModelChoiceFilter``
-~~~~~~~~~~~~~~~~~~~~~
+.. class:: ModelChoiceFilter
 
-Similar to a ``ChoiceFilter`` except it works with related models, used for
+Similar to a :class:`~django_filters.filters.ChoiceFilter` except it works 
with related models, used for
 ``ForeignKey`` by default.
 
-If automatically instantiated, ``ModelChoiceFilter`` will use the default
-``QuerySet`` for the related field. If manually instantiated you **must**
-provide the ``queryset`` kwarg.
+If automatically instantiated, 
:class:`~django_filters.filters.ModelChoiceFilter` will use the default
+:class:`~django.db.models.query.QuerySet` for the related field. If manually 
instantiated you **must**
+provide the :class:`~django.db.models.query.QuerySet` kwarg.
 
 Example::
 
@@ -340,8 +332,8 @@
             model = Book
             fields = ['author']
 
-The ``queryset`` argument also supports callable behavior. If a callable is
-passed, it will be invoked with ``Filterset.request`` as its only argument.
+The :class:`~django.db.models.query.QuerySet` argument also supports callable 
behavior. If a callable is
+passed, it will be invoked with ``FilterSet.request`` as its only argument.
 This allows you to easily filter by properties on the request object without
 having to override the ``FilterSet.__init__``.
 
@@ -363,16 +355,17 @@
         ...
 
 
-``ModelMultipleChoiceFilter``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. class:: ModelMultipleChoiceFilter
 
-Similar to a ``MultipleChoiceFilter`` except it works with related models, used
-for ``ManyToManyField`` by default.
+Similar to a :class:`~django_filters.filters.MultipleChoiceFilter` except it 
works
+with related models, used for :class:`~django.db.models.ManyToManyField` by 
default.
 
-As with ``ModelChoiceFilter``, if automatically instantiated,
-``ModelMultipleChoiceFilter`` will use the default ``QuerySet`` for the related
-field. If manually instantiated you **must** provide the ``queryset`` kwarg.
-Like ``ModelChoiceFilter``, the ``queryset`` argument has callable behavior.
+As with :class:`~django_filters.filters.ModelChoiceFilter`, if automatically 
instantiated,
+:class:`~django_filters.filters.ModelMultipleChoiceFilter` will use the default
+:class:`~django.db.models.query.QuerySet` for the related field. If manually 
instantiated
+you **must** provide the :class:`~django.db.models.query.QuerySet` kwarg. Like
+:class:`~django_filters.filters.ModelChoiceFilter`, the
+:class:`~django.db.models.query.QuerySet` argument has callable behavior.
 
 To use a custom field name for the lookup, you can use ``to_field_name``::
 
@@ -420,26 +413,25 @@
         objects = CustomQuerySet.as_manager()
 
 
-``NumberFilter``
-~~~~~~~~~~~~~~~~
+.. class:: NumberFilter
 
-Filters based on a numerical value, used with ``IntegerField``, ``FloatField``,
-and ``DecimalField`` by default.
+Filters based on a numerical value, used with 
:class:`~django.db.models.IntegerField`,
+:class:`~django.db.models.FloatField`, and 
:class:`~django.db.models.DecimalField` by default.
 
 .. method:: NumberFilter.get_max_validator()
 
-    Return a ``MaxValueValidator`` instance that will be added to
-    ``field.validators``. By default uses a limit value of ``1e50``. Return
-    ``None`` to disable maximum value validation.
+    Return a :class:`~django.core.validators.MaxValueValidator` instance that 
will
+    be added to :attr:`django.forms.Field.validators`. By default uses a limit 
value
+    of ``1e50``. Return ``None`` to disable maximum value validation.
 
-``NumericRangeFilter``
-~~~~~~~~~~~~~~~~~~~~~~
+.. class:: NumericRangeFilter
 
 Filters where a value is between two numerical values, or greater than a 
minimum or less
 than a maximum where only one limit value is provided. This filter is designed 
to work
-with the Postgres Numerical Range Fields, including ``IntegerRangeField``,
-``BigIntegerRangeField`` and ``FloatRangeField`` (available since Django 1.8). 
The default
-widget used is the ``RangeField``.
+with the Postgres Numerical Range Fields, including 
:class:`~django.contrib.postgres.fields.IntegerRangeField`,
+:class:`~django.contrib.postgres.fields.BigIntegerRangeField` and
+:class:`~django.contrib.postgres.fields.FloatRangeField` (available since 
Django 1.8). The default
+widget used is the :class:`~django_filters.widgets.RangeWidget`.
 
 Regular field lookups are available in addition to several containment 
lookups, including
 ``overlap``, ``contains``, and ``contained_by``. More details in the Django 
`docs`__.
@@ -449,8 +441,7 @@
 If the lower limit value is provided, the filter automatically defaults to 
``startswith``
 as the lookup and ``endswith`` if only the upper limit value is provided.
 
-``RangeFilter``
-~~~~~~~~~~~~~~~
+.. class:: RangeFilter
 
 Filters where a value is between two numerical values, or greater than a 
minimum or less than a maximum where only one limit value is provided. ::
 
@@ -474,18 +465,20 @@
     f = F({'price_max': '19'}, queryset=qs)
 
 
-``DateRangeFilter``
-~~~~~~~~~~~~~~~~~~~
+.. class:: DateRangeFilter
 
 Filter similar to the admin changelist date one, it has a number of common
 selections for working with date fields.
 
-``DateFromToRangeFilter``
-~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Similar to a ``RangeFilter`` except it uses dates instead of numerical values. 
It can be used with ``DateField``. It also works with ``DateTimeField``, but 
takes into consideration only the date.
+.. class:: DateFromToRangeFilter
+
+Similar to a :class:`~django_filters.filters.RangeFilter` except it uses dates
+instead of numerical values. It can be used with 
:class:`~django.db.models.DateField`.
+It also works with :class:`~django.db.models.DateTimeField`, but takes into 
consideration
+only the date.
 
-Example of using the ``DateField`` field::
+Example of using the :class:`~django.db.models.DateField` field::
 
     class Comment(models.Model):
         date = models.DateField()
@@ -508,14 +501,14 @@
     f = F({'date_before': '2016-02-01'})
 
 .. note::
-    When filtering ranges that occurs on DST transition dates 
``DateFromToRangeFilter`` will use the first valid hour of the day for start 
datetime and the last valid hour of the day for end datetime.
-    This is OK for most applications, but if you want to customize this 
behavior you must extend ``DateFromToRangeFilter`` and make a custom field for 
it.
+    When filtering ranges that occurs on DST transition dates 
:class:`~django_filters.filters.DateFromToRangeFilter` will use the first valid 
hour of the day for start datetime and the last valid hour of the day for end 
datetime.
+    This is OK for most applications, but if you want to customize this 
behavior you must extend :class:`~django_filters.filters.DateFromToRangeFilter` 
and make a custom field for it.
 
 .. warning::
     If you're using Django prior to 1.9 you may hit ``AmbiguousTimeError`` or 
``NonExistentTimeError`` when start/end date matches DST start/end respectively.
     This occurs because versions before 1.9 don't allow to change the DST 
behavior for making a datetime aware.
 
-Example of using the ``DateTimeField`` field::
+Example of using the :class:`~django.db.models.DateTimeField` field::
 
     class Article(models.Model):
         published = models.DateTimeField()
@@ -543,10 +536,10 @@
     f = F({'published_before': '2016-02-01'})
     assert len(f.qs) == 2
 
-``DateTimeFromToRangeFilter``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. class:: DateTimeFromToRangeFilter
 
-Similar to a ``RangeFilter`` except it uses datetime format values instead of 
numerical values. It can be used with ``DateTimeField``.
+Similar to a :class:`~django_filters.filters.RangeFilter` except it uses 
datetime
+format values instead of numerical values. It can be used with 
:class:`~django.db.models.DateTimeField`.
 
 Example::
 
@@ -576,10 +569,11 @@
     f = F({'published_before': '2016-01-01 10:00'})
     assert len(f.qs) == 2
 
-``IsoDateTimeFromToRangeFilter``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. class:: IsoDateTimeFromToRangeFilter
 
-Similar to a ``RangeFilter`` except it uses ISO 8601 formatted values instead 
of numerical values. It can be used with ``IsoDateTimeField``.
+Similar to a :class:`~django_filters.filters.RangeFilter` except it uses ISO 
8601
+formatted values instead of numerical values. It can be used with
+:class:`~django_filters.fields.IsoDateTimeField`.
 
 Example::
 
@@ -609,10 +603,10 @@
     f = F({'published_before': '2016-01-01T10:00:00+0100'})
     assert len(f.qs) == 2
 
-``TimeRangeFilter``
-~~~~~~~~~~~~~~~~~~~
+.. class:: TimeRangeFilter
 
-Similar to a ``RangeFilter`` except it uses time format values instead of 
numerical values. It can be used with ``TimeField``.
+Similar to a :class:`~django_filters.filters.RangeFilter` except it uses time
+format values instead of numerical values. It can be used with 
:class:`~django.db.models.TimeField`.
 
 Example::
 
@@ -636,26 +630,22 @@
     # Max-Only: Comments added before 10:00
     f = F({'time_before': '10:00'})
 
-``AllValuesFilter``
-~~~~~~~~~~~~~~~~~~~
+.. class:: AllValuesFilter
 
-This is a ``ChoiceFilter`` whose choices are the current values in the
+This is a :class:`~django_filters.filters.ChoiceFilter` whose choices are the 
current values in the
 database.  So if in the DB for the given field you have values of 5, 7, and 9
 each of those is present as an option.  This is similar to the default behavior
 of the admin.
 
-``AllValuesMultipleFilter``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. class:: AllValuesMultipleFilter
 
-This is a ``MultipleChoiceFilter`` whose choices are the current values in the
+This is a :class:`~django_filters.filters.MultipleChoiceFilter` whose choices 
are the current values in the
 database.  So if in the DB for the given field you have values of 5, 7, and 9
 each of those is present as an option.  This is similar to the default behavior
 of the admin.
 
 .. _lookup-choice-filter:
-
-``LookupChoiceFilter``
-~~~~~~~~~~~~~~~~~~~~~~
+.. class:: LookupChoiceFilter
 
 A combined filter that allows users to select the lookup expression from a 
dropdown.
 
@@ -678,9 +668,7 @@
     )
 
 .. _base-in-filter:
-
-``BaseInFilter``
-~~~~~~~~~~~~~~~~
+.. class:: BaseInFilter
 
 This is a base class used for creating IN lookup filters. It is expected that
 this filter class is used in conjunction with another filter class, as this
@@ -707,8 +695,7 @@
     f = F({'id__in': '1,3'})
     assert len(f.qs) == 2
 
-``BaseRangeFilter``
-~~~~~~~~~~~~~~~~~~~
+.. class:: BaseRangeFilter
 
 This is a base class used for creating RANGE lookup filters. It behaves
 identically to ``BaseInFilter`` with the exception that it expects only two
@@ -736,19 +723,18 @@
 
 
 .. _ordering-filter:
+.. class:: OrderingFilter
 
-``OrderingFilter``
-~~~~~~~~~~~~~~~~~~
-
-Enable queryset ordering. As an extension of ``ChoiceFilter`` it accepts
-two additional arguments that are used to build the ordering choices.
+Enable queryset ordering. As an extension of 
:class:`~django_filters.filters.ChoiceFilter`
+it accepts two additional arguments that are used to build the ordering 
choices.
 
 * ``fields`` is a mapping of {model field name: parameter name}. The
   parameter names are exposed in the choices and mask/alias the field
-  names used in the ``order_by()`` call. Similar to field ``choices``,
-  ``fields`` accepts the 'list of two-tuples' syntax that retains order.
-  ``fields`` may also just be an iterable of strings. In this case, the
-  field names simply double as the exposed parameter names.
+  names used in the :meth:`~django.db.models.query.QuerySet.order_by` call.
+  Similar to field :attr:`~django.db.models.Field.choices`, ``fields``
+  accepts the 'list of two-tuples' syntax that retains order. ``fields``
+  may also just be an iterable of strings. In this case, the field names
+  simply double as the exposed parameter names.
 
 * ``field_labels`` is an optional argument that allows you to customize
   the display label for the corresponding parameter. It accepts a mapping
@@ -814,7 +800,7 @@
 are not able to retain selection order.
 
 Adding Custom filter choices
-""""""""""""""""""""""""""""
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 If you wish to sort by non-model fields, you'll need to add custom handling to 
an
 ``OrderingFilter`` subclass. For example, if you want to sort by a computed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/docs/ref/filterset.txt 
new/django_filter-25.2/docs/ref/filterset.txt
--- old/django_filter-25.1/docs/ref/filterset.txt       2024-12-28 
10:35:11.321407300 +0100
+++ new/django_filter-25.2/docs/ref/filterset.txt       2025-10-05 
11:38:54.312521200 +0200
@@ -2,8 +2,16 @@
 FilterSet Options
 =================
 
+.. module:: django_filters.filterset
+   :synopsis: FilterSet features and options.
+
+.. currentmodule:: django_filters.filterset
+
 This document provides a guide on using additional FilterSet features.
 
+
+.. class:: FilterSet
+
 Meta options
 ------------
 
@@ -21,12 +29,10 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 The ``FilterSet`` is capable of automatically generating filters for a given
-``model``'s fields. Similar to Django's ``ModelForm``, filters are created
+``model``'s fields. Similar to Django's :class:`~django.forms.ModelForm`, 
filters are created
 based on the underlying model field's type. This option must be combined with
 either the ``fields`` or ``exclude`` option, which is the same requirement for
-Django's ``ModelForm`` class, detailed `here`__.
-
-__ 
https://docs.djangoproject.com/en/stable/topics/forms/modelforms/#selecting-the-fields-to-use
+Django's :class:`~django.forms.ModelForm` class, detailed :ref:`here 
<modelforms-selecting-fields>`.
 
 .. code-block:: python
 
@@ -68,13 +74,12 @@
 The list syntax will create an ``exact`` lookup filter for each field included
 in ``fields``. The dictionary syntax will create a filter for each lookup
 expression declared for its corresponding model field. These expressions may
-include both transforms and lookups, as detailed in the `lookup reference`__.
-
-__ 
https://docs.djangoproject.com/en/stable/ref/models/lookups/#module-django.db.models.lookups
+include both transforms and lookups, as detailed in the
+:mod:`lookup reference <django.db.models.lookups>`.
 
 Note that it is **not** necessary to include declared filters in a ``fields``
-list - doing so will only affect the order in which fields appear on a 
FilterSet's form.  Including declarative aliases in a
-``fields`` dict will raise an error.
+list - doing so will only affect the order in which fields appear on a 
FilterSet's form.
+Including declarative aliases in a ``fields`` dict will raise an error.
 
 .. code-block:: python
 
@@ -116,7 +121,7 @@
 
 The inner ``Meta`` class also takes an optional ``form`` argument.  This is a
 form class from which ``FilterSet.form`` will subclass.  This works similar to
-the ``form`` option on a ``ModelAdmin.``
+the ``form`` option on a :class:`~django.contrib.admin.ModelAdmin`.
 
 
 .. _filter_overrides:
@@ -149,10 +154,11 @@
 
 
 
-A possible usecase would be creating a custom filter to be able to filter on 
``FileFields``
-(``FileField`` filtering is hard to define in a generalised way, which is why 
there is no ``FileFilter``).
+A possible usecase would be creating a custom filter to be able to filter on a
+:class:`~django.db.models.FileField` (This is hard to define in a generalised 
way,
+which is why there is no ``FileFilter``).
 
-This example shows an override used to filter on a ``FileField``::
+This example shows an override used to filter on a 
:class:`~django.db.models.FileField`::
 
     class Questionnaire(models.Model):
         file = models.FileField(upload_to=questionnaire_path)
@@ -200,7 +206,7 @@
 --------------------------------
 
 When overriding classmethods, calling ``super(MyFilterSet, cls)`` may result
-in a ``NameError`` exception. This is due to the ``FilterSetMetaclass`` calling
+in a :exc:`NameError` exception. This is due to the ``FilterSetMetaclass`` 
calling
 these classmethods before the ``FilterSet`` class has been fully created.
 There are two recommmended workarounds:
 
@@ -219,8 +225,8 @@
             model = Product
             fields = ['...']
 
-``filter_for_lookup()``
-~~~~~~~~~~~~~~~~~~~~~~~
+
+.. method:: FilterSet.filter_for_lookup
 
 Prior to version 0.13.0, filter generation did not take into account the
 ``lookup_expr`` used. This commonly caused malformed filters to be generated
@@ -256,6 +262,8 @@
 Using ``filterset_factory``
 ---------------------------
 
+.. function:: filterset_factory
+
 A ``FilterSet`` for a ``model`` can also be created by the
 ``filterset_factory``, which creates a ``FilterSet`` with the ``model`` set in
 the FilterSets Meta. You can pass a customized ``FilterSet`` class to the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/docs/ref/widgets.txt 
new/django_filter-25.2/docs/ref/widgets.txt
--- old/django_filter-25.1/docs/ref/widgets.txt 2023-03-26 11:29:15.081746300 
+0200
+++ new/django_filter-25.2/docs/ref/widgets.txt 2025-10-05 11:38:54.312950400 
+0200
@@ -2,14 +2,19 @@
 Widget Reference
 ================
 
+.. module:: django_filters.widgets
+   :synopsis: Provided form widgets and their arguments.
+
+.. currentmodule:: django_filters.widgets
+
+
 This is a reference document with a list of the provided widgets and their
 arguments.
 
 
 .. _link-widget:
 
-``LinkWidget``
-~~~~~~~~~~~~~~
+.. class:: LinkWidget
 
 This widget renders each option as a link, instead of an actual <input>.  It 
has
 one method that you can override for additional customizability.
@@ -24,13 +29,11 @@
 
 
 .. _boolean-widget:
-
-``BooleanWidget``
-~~~~~~~~~~~~~~~~~
+.. class:: BooleanWidget
 
 This widget converts its input into Python's True/False values. It will convert
 all case variations of ``True`` and ``False`` into the internal Python values.
-To use it, pass this into the ``widgets`` argument of the ``BooleanFilter``:
+To use it, pass this into the ``widgets`` argument of the 
:class:`~django_filters.filters.BooleanFilter`:
 
 .. code-block:: python
 
@@ -38,9 +41,7 @@
 
 
 .. _csv-widget:
-
-``CSVWidget``
-~~~~~~~~~~~~~
+.. class:: CSVWidget
 
 This widget expects a comma separated value and converts it into a list of
 string values. It is expected that the field class handle a list of values as
@@ -48,26 +49,23 @@
 
 
 .. _range-widget:
+.. class:: RangeWidget
 
-``RangeWidget``
-~~~~~~~~~~~~~~~
-
-This widget is used with ``RangeFilter`` and its subclasses. It generates two
-form input elements which generally act as start/end values in a range.
-Under the hood, it is Django's ``forms.TextInput`` widget and accepts
-the same arguments and values. To use it, pass it to ``widget`` argument of
-a ``RangeField``:
+This widget is used with :class:`~django_filters.filters.RangeFilter` and its
+subclasses. It generates two form input elements which generally act as 
start/end
+values in a range. Under the hood, it is Django's 
:class:`~django.forms.TextInput` widget and
+accepts the same arguments and values. To use it, pass it to ``widget`` 
argument of
+a :class:`~django_filters.filters.RangeFilter`:
 
 .. code-block:: python
 
   date_range = DateFromToRangeFilter(widget=RangeWidget(attrs={'placeholder': 
'YYYY/MM/DD'}))
 
 
-``SuffixedMultiWidget``
-~~~~~~~~~~~~~~~~~~~~~~~
+.. class:: SuffixedMultiWidget
 
-Extends Django's builtin ``MultiWidget`` to append custom suffixes instead of
-indices. For example, take a range widget that accepts minimum and maximum
+Extends Django's builtin :class:`~django.forms.MultiWidget` to append custom 
suffixes
+instead of indices. For example, take a range widget that accepts minimum and 
maximum
 bounds. By default, the resulting query params would look like the following:
 
 .. code-block:: http
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/pyproject.toml 
new/django_filter-25.2/pyproject.toml
--- old/django_filter-25.1/pyproject.toml       2025-02-14 17:19:33.070458700 
+0100
+++ new/django_filter-25.2/pyproject.toml       2025-10-05 11:42:05.229426000 
+0200
@@ -16,21 +16,22 @@
     "License :: OSI Approved :: BSD License",
     "Operating System :: OS Independent",
     "Framework :: Django",
-    "Framework :: Django :: 4.2",
-    "Framework :: Django :: 5.0",
-    "Framework :: Django :: 5.1",
     "Framework :: Django :: 5.2",
+    "Framework :: Django :: 6.0",
     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
 ]
-requires-python = ">=3.9"
-dependencies = ["Django>=4.2"]
+requires-python = ">=3.10"
+dependencies = ["Django>=5.2"]
 dynamic = ["version"]
 
+[project.optional-dependencies]
+drf = ["djangorestframework"]
+
 [project.urls]
 Homepage = "https://github.com/carltongibson/django-filter/tree/main";
 Documentation = "https://django-filter.readthedocs.io/en/main/";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_filter-25.1/tox.ini 
new/django_filter-25.2/tox.ini
--- old/django_filter-25.1/tox.ini      2025-01-22 17:23:17.905338000 +0100
+++ new/django_filter-25.2/tox.ini      2025-10-05 11:41:06.430994500 +0200
@@ -1,9 +1,7 @@
 [tox]
 envlist =
-       {py39, py310, py311, py312}-django42,
-       {py310, py311, py312}-django50,
-       {py310, py311, py312, py313}-django51,
        {py310, py311, py312, py313}-django52,
+       {py312, py313}-django60,
        {py312, py313}-latest,
        isort,lint,docs,warnings,
 isolated_build = true
@@ -19,10 +17,8 @@
 setenv =
        PYTHONDONTWRITEBYTECODE=1
 deps =
-    django42: Django>=4.2,<5.0
-    django50: Django>=5.0,<5.1
-    django51: Django>=5.1,<5.2
-    django52: Django>=5.2a1,<6.0
+    django52: Django>=5.2,<6.0
+    django60: Django>=6.0a1,<7.0
     !latest: djangorestframework
     latest: {[latest]deps}
     -r requirements/test-ci.txt

Reply via email to