{ "info": { "author": "Artem Fedotov", "author_email": "badum-ts@yandex.ru", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP" ], "description": "# Django REST framework light includable serializer fields\n\n## Requirements\n* Python (2.7, 3.4, 3.5, 3.6)\n* [Django REST Framework](https://github.com/encode/django-rest-framework) (>=3.0)\n\n\n## Usage\nserializers.py\n```python\nclass GroupSerializer(SerializerIncludeMixin, ModelSerializer):\n @classproperty # django.utils.decorators\n def extra_objects(cls):\n return {\n 'users': UserSerializer(source='user_set', many=True),\n 'active_users': UserSerializer(many=True),\n }\n\n class Meta:\n model = Group\n fields = ('id', 'name')\n```\n\nviews.py\n```python\nclass GroupViewSet(QueryOptimizerMixin, ReadOnlyModelViewSet):\n \"\"\"\n Groups.\n\n list:\n Available includable objects:\n\n * users - all users;\n * active_users - only active users.\n \"\"\"\n queryset = Group.objects.all()\n serializer_class = GroupSerializer\n select_related = {}\n prefetch_related = {\n 'users': 'user_set',\n 'active_users': Prefetch(\n lookup='user_set',\n queryset=User.objects.filter(is_active=True),\n to_attr='active_users',\n ),\n }\n```\n\nAnd now we can to do that:\n\n```python\nclient = APIClient()\nresponse = client.get( # GET /groups/?include[]=active_users\n '/groups/',\n data=[\n ('include[]', 'active_users'),\n ],\n)\n```\n\nThis will make only 2 query: \n * all groups\n * prefetch only active users\n\n# Documentation\n## rest_framework_include_mixin.SerializerIncludeMixin\n\nUsed in any serializer to automatically replace and add serializer fields.\n\n### `extra_objects` class variable\n\n**key**:str - value from GET parameter `include[]`.\nFor example, `profile` for `/users/?include[]=profile`.\n\n**value**:Serializer - any field serializer.\n\nExample:\n```python\nclass UserSerializer(SerializerIncludeMixin, ModelSerializer):\n extra_objects = {\n 'profile': ProfileSerializer(),\n 'groups': GroupSerializer(many=True),\n }\n\n class Meta:\n model = User\n fields = ('id', 'profile_id')\n```\n\n| GET parameters | Result serializer fields |\n|-------------------------------------|--------------------------------------------------------------------------------------------|\n| | 'id': IntegerField(), 'profile_id': IntegerField() |\n| ?include[]=profile | 'id': IntegerField(), 'profile': ProfileSerializer() |\n| ?include[]=groups | 'id': IntegerField(), 'profile_id': IntegerField(), 'groups': GroupSerializer(many=True) |\n| ?include[]=profile&include[]=groups | 'id': IntegerField(), 'profile': ProfileSerializer(), 'groups': GroupSerializer(many=True) |\n\n*Note: standard serializer fields with/without `_id` will be replaced to field from `extra_objects`.*\n\n*For `?include[]=profile`: `profile` and `profile_id` will be replaced to `profile` from `extra_objects`.*\n\n\n## rest_framework_include_mixin.QueryOptimizerMixin\n\nUsed with ModelViewSet to optimize database queries.\n\n### `select_related` class variable\n**key**:str - value from GET parameter `include[]`.\n\n**value**:str - field name that can be passed to select_related ([model manager function](https://docs.djangoproject.com/en/2.1/ref/models/querysets/#select-related)).\n\n### `prefetch_related` class variable\n**key**:str - value from GET parameter `include[]`.\n\n**value**:Union[str, Prefetch] - field name or Prefetch object that can be passed to prefetch_related ([model manager function](https://docs.djangoproject.com/en/2.1/ref/models/querysets/#prefetch-related)).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/art1415926535/django-rest-framework-include-mixin", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "djangorestframework-include-mixin", "package_url": "https://pypi.org/project/djangorestframework-include-mixin/", "platform": "", "project_url": "https://pypi.org/project/djangorestframework-include-mixin/", "project_urls": { "Homepage": "https://github.com/art1415926535/django-rest-framework-include-mixin" }, "release_url": "https://pypi.org/project/djangorestframework-include-mixin/0.4/", "requires_dist": [ "djangorestframework (>=3.0.0)" ], "requires_python": "", "summary": "Optimized includable serializer fields.", "version": "0.4" }, "last_serial": 4577851, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "64cb28cd4920da8d168b198815ad5d56", "sha256": "f9162672743ac1ae528998399a083060bf87423f0218aeb937a56e11aca9fdc3" }, "downloads": -1, "filename": "djangorestframework_include_mixin-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "64cb28cd4920da8d168b198815ad5d56", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5052, "upload_time": "2018-12-09T17:04:11", "url": "https://files.pythonhosted.org/packages/83/2f/7c885cd2c1333705d410794c95e3c0cdead880677dcd4188d54b1ba44ad2/djangorestframework_include_mixin-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38cf6439b14206a10d83d006421e8851", "sha256": "09a607139686c31eed4a6b1e80fafb8c02b6ce7ffb98d85a6a3fa7bdba4fe9d3" }, "downloads": -1, "filename": "djangorestframework-include-mixin-0.2.tar.gz", "has_sig": false, "md5_digest": "38cf6439b14206a10d83d006421e8851", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4431, "upload_time": "2018-12-09T17:04:13", "url": "https://files.pythonhosted.org/packages/ff/77/4c5ee0d07bd9777fc0cfac4b38c62c64e388bdb3054efae3adb03a3c0329/djangorestframework-include-mixin-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "2a69b83d399a345f4619574b98e733dc", "sha256": "24ad0c5b26f8a5f25435a8a8adbf6956cc483209b2f73f815adcdf88b390b578" }, "downloads": -1, "filename": "djangorestframework_include_mixin-0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "2a69b83d399a345f4619574b98e733dc", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5063, "upload_time": "2018-12-09T18:05:28", "url": "https://files.pythonhosted.org/packages/cd/38/1d1568409814f50116b3c544e8d02f5a9ca558607440b07ce51b6970de23/djangorestframework_include_mixin-0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cec4719b5f10bc276483f78a24c70ad", "sha256": "2ed356c314419c61c5559cb2550279453e122a7a14b29cdcee482acfc0e1dda8" }, "downloads": -1, "filename": "djangorestframework_include_mixin-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "8cec4719b5f10bc276483f78a24c70ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5064, "upload_time": "2018-12-09T17:52:28", "url": "https://files.pythonhosted.org/packages/cf/d7/373694e5ed2e386aeda737fa3aaacca3e4be8afc85d621190981e7f76d25/djangorestframework_include_mixin-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "76b601d9fe5142ee77886fff9fed90f5", "sha256": "1eef6538af27b1ff9759fd81279c3388852da274c1fa093d4c4faf86bb349fee" }, "downloads": -1, "filename": "djangorestframework-include-mixin-0.3.tar.gz", "has_sig": false, "md5_digest": "76b601d9fe5142ee77886fff9fed90f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4435, "upload_time": "2018-12-09T17:52:29", "url": "https://files.pythonhosted.org/packages/71/39/29316ba788897be3ccfe1ab4a515079a2391295a7b3e3bea9faf9f40ca1b/djangorestframework-include-mixin-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "aa6e7a7142b1240d53fceed02279d128", "sha256": "cb4f0a57ee523e5f1f6dcd049ae8db838b63fdf03670720b1a4bc43e585b8204" }, "downloads": -1, "filename": "djangorestframework_include_mixin-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aa6e7a7142b1240d53fceed02279d128", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5067, "upload_time": "2018-12-09T18:22:58", "url": "https://files.pythonhosted.org/packages/ca/d7/5ed591654185b0683b9bfc8436997d532276dcd3eff0e9de02a68d5d7bad/djangorestframework_include_mixin-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0475770591d655c495a801b22d2c0b00", "sha256": "a71d29fe9fdaf8a2dcd8ed4b9caeb1014d3daff8c9f6639935e74c5c1d0c1d8c" }, "downloads": -1, "filename": "djangorestframework-include-mixin-0.4.tar.gz", "has_sig": false, "md5_digest": "0475770591d655c495a801b22d2c0b00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4500, "upload_time": "2018-12-09T18:22:59", "url": "https://files.pythonhosted.org/packages/32/fa/3e6135561803d87c1cb26ae8aff8b0d61bf0d8daf739b9011079a4b0cf68/djangorestframework-include-mixin-0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aa6e7a7142b1240d53fceed02279d128", "sha256": "cb4f0a57ee523e5f1f6dcd049ae8db838b63fdf03670720b1a4bc43e585b8204" }, "downloads": -1, "filename": "djangorestframework_include_mixin-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aa6e7a7142b1240d53fceed02279d128", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5067, "upload_time": "2018-12-09T18:22:58", "url": "https://files.pythonhosted.org/packages/ca/d7/5ed591654185b0683b9bfc8436997d532276dcd3eff0e9de02a68d5d7bad/djangorestframework_include_mixin-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0475770591d655c495a801b22d2c0b00", "sha256": "a71d29fe9fdaf8a2dcd8ed4b9caeb1014d3daff8c9f6639935e74c5c1d0c1d8c" }, "downloads": -1, "filename": "djangorestframework-include-mixin-0.4.tar.gz", "has_sig": false, "md5_digest": "0475770591d655c495a801b22d2c0b00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4500, "upload_time": "2018-12-09T18:22:59", "url": "https://files.pythonhosted.org/packages/32/fa/3e6135561803d87c1cb26ae8aff8b0d61bf0d8daf739b9011079a4b0cf68/djangorestframework-include-mixin-0.4.tar.gz" } ] }