django-pfx 1.4.dev146__tar.gz → 1.4.dev148__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/PKG-INFO +1 -1
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/django_pfx.egg-info/PKG-INFO +1 -1
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +2 -2
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/fields.py +24 -4
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/rest_views.py +5 -1
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_fields_one2many.py +19 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/.gitignore +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/LICENSE +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/README.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/Makefile +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/conf.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/index.rst +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/img/pfx.png +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/make_messages +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/manage.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/fields/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/fields/decimal_field.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/fields/media_field.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/fields/minutes_duration_field.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/fields/nh3_field.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/0003_delete_pfxpermissionsuser.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/operations/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/operations/permissions.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/login_ban.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/ordered_model_mixin.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/storage/exceptions.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/storage/local_storage.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/media_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pyproject.toml +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/requirements.txt +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/serve-doc +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/setup.cfg +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/setup.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/apps.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/migrations/0002_alter_book_cover.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/migrations/0003_book_local_file.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/models.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/basic_api_test.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_api_doc_search.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_fields_choices.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_fields_date.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_fields_decimal.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_fields_minutes_duration.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_fields_nh3.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_ordered_rest_view_mixin.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_permissions.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_post_migrate_groups_update.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/urls.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/views.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/settings/common.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/urls.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/views.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/models.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/settings/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/settings/ci.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/settings/common.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/settings/dev.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/tests/__init__.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/tests/test_api.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/tests/test_auth_api.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/urls.py +0 -0
- {django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/views.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-pfx
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.dev148
|
|
4
4
|
Summary: Django PFX is a toolkit designed to streamline the development of RESTful APIs using the Django framework.
|
|
5
5
|
Author: Hervé Martinet
|
|
6
6
|
Author-email: herve.martinet@gmail.com
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-pfx
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.dev148
|
|
4
4
|
Summary: Django PFX is a toolkit designed to streamline the development of RESTful APIs using the Django framework.
|
|
5
5
|
Author: Hervé Martinet
|
|
6
6
|
Author-email: herve.martinet@gmail.com
|
|
@@ -7,7 +7,7 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: \n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
|
-
"POT-Creation-Date: 2025-09-
|
|
10
|
+
"POT-Creation-Date: 2025-09-15 14:06+0200\n"
|
|
11
11
|
"PO-Revision-Date: 2021-06-22 23:31+0200\n"
|
|
12
12
|
"Last-Translator: \n"
|
|
13
13
|
"Language-Team: \n"
|
|
@@ -302,7 +302,7 @@ msgstr "{model} {obj} créé."
|
|
|
302
302
|
msgid "{model} {obj} updated."
|
|
303
303
|
msgstr "{model} {obj} modifié."
|
|
304
304
|
|
|
305
|
-
#: views/rest_views.py:
|
|
305
|
+
#: views/rest_views.py:1217
|
|
306
306
|
#, python-brace-format
|
|
307
307
|
msgid "{model} {obj} deleted."
|
|
308
308
|
msgstr "{model} {obj} supprimé."
|
|
@@ -93,9 +93,20 @@ class FieldType:
|
|
|
93
93
|
return cls.APIDOC_FIELD_BINDING.get(field_type)
|
|
94
94
|
|
|
95
95
|
|
|
96
|
+
def get_db_type(field):
|
|
97
|
+
if isinstance(field, models.ManyToManyRel):
|
|
98
|
+
return "ManyToManyField"
|
|
99
|
+
elif isinstance(field, models.ManyToOneRel):
|
|
100
|
+
return "OneToManyField"
|
|
101
|
+
elif isinstance(field, models.OneToOneRel):
|
|
102
|
+
return "OneToOneField"
|
|
103
|
+
return field.__class__.__name__
|
|
104
|
+
|
|
105
|
+
|
|
96
106
|
class ViewField:
|
|
97
107
|
def __init__(
|
|
98
|
-
self, name, verbose_name=None, alias=None,
|
|
108
|
+
self, name, verbose_name=None, alias=None,
|
|
109
|
+
field_type=None, db_type=None,
|
|
99
110
|
readonly=False, readonly_create=False, readonly_update=False,
|
|
100
111
|
choices=None, json_repr=None, media_field_api=None,
|
|
101
112
|
related_model=None, related_model_api=None, related_fields=None,
|
|
@@ -106,6 +117,7 @@ class ViewField:
|
|
|
106
117
|
self.readonly_update = readonly or readonly_update
|
|
107
118
|
self.verbose_name = verbose_name or name
|
|
108
119
|
self.field_type = field_type
|
|
120
|
+
self.db_type = db_type
|
|
109
121
|
self.choices = dict(choices or [])
|
|
110
122
|
self.json_repr = json_repr
|
|
111
123
|
self.media_field_api = media_field_api
|
|
@@ -123,7 +135,8 @@ class ViewField:
|
|
|
123
135
|
return self.readonly_create if created else self.readonly_update
|
|
124
136
|
|
|
125
137
|
def meta(self):
|
|
126
|
-
res = dict(
|
|
138
|
+
res = dict(
|
|
139
|
+
type=self.field_type, db_type=self.db_type, name=self.verbose_name)
|
|
127
140
|
if self.choices:
|
|
128
141
|
res['choices'] = [
|
|
129
142
|
dict(label=str(v), value=k) for k, v in self.choices.items()]
|
|
@@ -206,12 +219,15 @@ class ViewField:
|
|
|
206
219
|
verbose_name = getattr(
|
|
207
220
|
prop.fget, 'short_description', prop.fget.__name__)
|
|
208
221
|
field_type = getattr(prop.fget, 'field_type', None)
|
|
222
|
+
db_type = getattr(prop.fget, 'db_type', None)
|
|
209
223
|
else:
|
|
210
224
|
verbose_name = (
|
|
211
225
|
hasattr(prop, 'name') and prop.name or str(prop))
|
|
212
226
|
field_type = None
|
|
227
|
+
db_type = None
|
|
213
228
|
setifnone(kwargs, 'verbose_name', verbose_name)
|
|
214
229
|
setifnone(kwargs, 'field_type', field_type)
|
|
230
|
+
setifnone(kwargs, 'db_type', db_type)
|
|
215
231
|
return ViewField(name, **kwargs)
|
|
216
232
|
|
|
217
233
|
@classmethod
|
|
@@ -219,6 +235,8 @@ class ViewField:
|
|
|
219
235
|
setifnone(kwargs, 'verbose_name', cls._get_model_verbose_name(field))
|
|
220
236
|
setifnone(
|
|
221
237
|
kwargs, 'field_type', FieldType.from_model_field(field.__class__))
|
|
238
|
+
setifnone(
|
|
239
|
+
kwargs, 'db_type', get_db_type(field))
|
|
222
240
|
return ViewModelField(
|
|
223
241
|
name, model_field=field, **kwargs)
|
|
224
242
|
|
|
@@ -427,7 +445,8 @@ class VF:
|
|
|
427
445
|
readonly=False, readonly_create=False, readonly_update=False,
|
|
428
446
|
choices=None, select_related=None, prefetch_related=None,
|
|
429
447
|
json_repr=None, related_model=None, related_model_api=None,
|
|
430
|
-
field=None, related_fields=None, media_field_api=None
|
|
448
|
+
field=None, related_fields=None, media_field_api=None,
|
|
449
|
+
db_type=None):
|
|
431
450
|
self.kwargs = dict(
|
|
432
451
|
name=name, verbose_name=verbose_name, field_type=field_type,
|
|
433
452
|
alias=alias,
|
|
@@ -436,7 +455,8 @@ class VF:
|
|
|
436
455
|
select_related=select_related, prefetch_related=prefetch_related,
|
|
437
456
|
json_repr=json_repr, related_model=related_model,
|
|
438
457
|
related_model_api=related_model_api, field=field,
|
|
439
|
-
related_fields=related_fields, media_field_api=media_field_api
|
|
458
|
+
related_fields=related_fields, media_field_api=media_field_api,
|
|
459
|
+
db_type=db_type)
|
|
440
460
|
|
|
441
461
|
def to_field(self, model):
|
|
442
462
|
return ViewField.from_name(model, **self.kwargs)
|
|
@@ -7,7 +7,7 @@ from django.conf import settings
|
|
|
7
7
|
from django.core.cache import cache
|
|
8
8
|
from django.core.exceptions import FieldError, ValidationError
|
|
9
9
|
from django.db import IntegrityError, transaction
|
|
10
|
-
from django.db.models import ForeignKey, Model, Q
|
|
10
|
+
from django.db.models import ForeignKey, ManyToOneRel, Model, Q
|
|
11
11
|
from django.db.models.fields import AutoFieldMixin
|
|
12
12
|
from django.urls import path
|
|
13
13
|
from django.utils.translation import gettext_lazy as _
|
|
@@ -370,6 +370,10 @@ class ModelResponseMixin(ModelMixin):
|
|
|
370
370
|
if rel_data:
|
|
371
371
|
for k, v in rel_data.items():
|
|
372
372
|
if isinstance(v, ModelList):
|
|
373
|
+
if isinstance(obj._meta.get_field(k), ManyToOneRel):
|
|
374
|
+
for cur in getattr(obj, k).all():
|
|
375
|
+
if cur not in v:
|
|
376
|
+
cur.delete()
|
|
373
377
|
for o in v:
|
|
374
378
|
save_field = getattr(o, '_save_related', False)
|
|
375
379
|
if save_field:
|
|
@@ -176,3 +176,22 @@ class TestFieldsOne2Many(TestAssertMixin, TestCase):
|
|
|
176
176
|
self.assertJE(response, 'name', ["This field cannot be blank."])
|
|
177
177
|
self.assertJE(
|
|
178
178
|
response, 'rels::0::name', ["This field cannot be null."])
|
|
179
|
+
|
|
180
|
+
def test_put_delete(self):
|
|
181
|
+
o = TestOne2ManyModel.objects.create(name="Test")
|
|
182
|
+
r1 = TestOne2ManyRelModel.objects.create(rel=o, name="R1", descr="D1")
|
|
183
|
+
r2 = TestOne2ManyRelModel.objects.create(rel=o, name="R2", descr="D2")
|
|
184
|
+
TestOne2ManyRelModel.objects.create(rel=o, name="R3", descr="D3")
|
|
185
|
+
|
|
186
|
+
vals = self.client.get(f'/api/test/{o.pk}').json()
|
|
187
|
+
del vals['rels'][2]
|
|
188
|
+
|
|
189
|
+
response = self.client.put(f'/api/test/{o.pk}', vals)
|
|
190
|
+
self.assertRC(response, 200)
|
|
191
|
+
self.assertSize(response, 'rels', 2)
|
|
192
|
+
self.assertJE(response, 'rels.@0.pk', r1.pk)
|
|
193
|
+
self.assertJE(response, 'rels.@0.name', "R1")
|
|
194
|
+
self.assertJE(response, 'rels.@0.descr', "D1")
|
|
195
|
+
self.assertJE(response, 'rels.@1.pk', r2.pk)
|
|
196
|
+
self.assertJE(response, 'rels.@1.name', "R2")
|
|
197
|
+
self.assertJE(response, 'rels.@1.descr', "D2")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/fields/minutes_duration_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/management/commands/makeapidoc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/0002_pfxpermissionsuser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/operations/__init__.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/migrations/operations/permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/abstract_pfx_base_user.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/models/user_filtered_queryset_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/templates/registration/welcome_email.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/ordered_rest_view_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/meta_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_limit.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_offset.py
RENAMED
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/pfx/pfxcore/views/parameters/subset_page_subset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests/tests/test_post_migrate_groups_update.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_base_user/settings/dev_custom_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/migrations/0001_initial.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev146 → django_pfx-1.4.dev148}/tests_custom_user/settings/dev_custom_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|