pax_global_header00006660000000000000000000000064146762047550014532gustar00rootroot0000000000000052 comment=4e5f7de6922eb859aa94c0ee10d468af1fcd14df django-taggit-6.1.0/000077500000000000000000000000001467620475500142555ustar00rootroot00000000000000django-taggit-6.1.0/.coveragerc000066400000000000000000000003431467620475500163760ustar00rootroot00000000000000[run] branch = True source = taggit [report] exclude_lines = if self.debug: pragma: no cover raise NotImplementedError if __name__ == .__main__.: ignore_errors = True omit = tests/* taggit/migrations/* django-taggit-6.1.0/.github/000077500000000000000000000000001467620475500156155ustar00rootroot00000000000000django-taggit-6.1.0/.github/workflows/000077500000000000000000000000001467620475500176525ustar00rootroot00000000000000django-taggit-6.1.0/.github/workflows/release.yml000066400000000000000000000017461467620475500220250ustar00rootroot00000000000000name: Release on: push: tags: - '*' jobs: build: if: github.repository == 'jazzband/django-taggit' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.8 - name: Install dependencies run: | python -m pip install -U pip python -m pip install -U setuptools twine wheel - name: Build package run: | python setup.py --version python setup.py sdist --format=gztar bdist_wheel twine check dist/* - name: Upload packages to Jazzband if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@master with: user: jazzband password: ${{ secrets.JAZZBAND_RELEASE_KEY }} repository_url: https://jazzband.co/projects/django-taggit/upload django-taggit-6.1.0/.github/workflows/test.yml000066400000000000000000000027671467620475500213700ustar00rootroot00000000000000name: Test on: [push, pull_request] jobs: build: name: Python ${{ matrix.python-version }} runs-on: ubuntu-latest # The maximum number of minutes to let a workflow run # before GitHub automatically cancels it. Default: 360 timeout-minutes: 30 strategy: # When set to true, GitHub cancels # all in-progress jobs if any matrix job fails. fail-fast: false max-parallel: 5 matrix: python-version: - "3.8" - "3.9" - "3.10" - "3.11" - "3.12" steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Get pip cache dir id: pip-cache run: echo "::set-output name=dir::$(pip cache dir)" - name: Cache uses: actions/cache@v2 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ matrix.python-version }}-v1-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/tox.ini') }} restore-keys: | ${{ matrix.python-version }}-v1- - name: Install Python dependencies run: | python -m pip install --upgrade pip python -m pip install --upgrade tox tox-gh-actions - name: Tox tests run: tox -v - name: Upload coverage uses: codecov/codecov-action@v1 with: name: Python ${{ matrix.python-version }} django-taggit-6.1.0/.gitignore000066400000000000000000000023061467620475500162460ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ .pytest_cache/ # Translations *.pot # Django stuff: *.log local_settings.py db.sqlite3 # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ # PyCharm files .idea/ django-taggit-6.1.0/.pre-commit-config.yaml000066400000000000000000000011521467620475500205350ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.6.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/psf/black rev: 24.4.2 hooks: - id: black - repo: https://github.com/PyCQA/flake8 rev: 7.1.0 hooks: - id: flake8 - repo: https://github.com/asottile/pyupgrade rev: v3.16.0 hooks: - id: pyupgrade args: [--py37-plus] - repo: https://github.com/adamchainz/django-upgrade rev: 1.19.0 hooks: - id: django-upgrade args: [--target-version, "3.2"] django-taggit-6.1.0/.readthedocs.yml000066400000000000000000000002331467620475500173410ustar00rootroot00000000000000version: 2 build: os: ubuntu-22.04 tools: python: "3.9" python: install: - method: pip path: . sphinx: configuration: docs/conf.py django-taggit-6.1.0/AUTHORS000066400000000000000000000012761467620475500153330ustar00rootroot00000000000000django-taggit was originally created by Alex Gaynor. django-taggit-serializer was originally created by Paul Oostenrijk. The following is a list of much appreciated contributors: Nathan Borror fakeempire Ben Firshman Alex Gaynor Rob Hudson Carl Meyer Frank Wiles Jonathan Buchanan idle sign Charles Leifer Florian Apolloner Andrew Pryde John Whitlock Jon Dufresne Pablo Olmedo Dorado Steve Reciao django-taggit-6.1.0/CHANGELOG.rst000066400000000000000000000367571467620475500163200ustar00rootroot00000000000000Changelog ========= (Unreleased) ~~~~~~~~~~~~ 6.1.0 (2024-09-29) ~~~~~~~~~~~~~~~~~~ * Add a management command (``remove_orphaned_tags``) to remove orphaned tags * Add a fallback for when multiple tags are found in case-insensitivity mode (the earliest by PK is returned) * Add a ``deduplicate_tags`` management command to remove duplicate tags based on case insensitivity. This feature is enabled when ``TAGGIT_CASE_INSENSITIVE`` is set to ``True`` in the settings. * We no longer package tests, docs, or the sample taggit app into the distributed wheels. While we believe this shouldn't affect anything for users of the library, please tell us if you find yourself hitting issues (like around import errors) * Fix missing template file for admin merge tag action 6.0.0 (2024-07-27) ~~~~~~~~~~~~~~~~~~ * By default, order tag items on instances by the primary key. This generally means that they will be ordered by "creation date" for the tag item. The previous behavior for this was that by default tag items were not ordered. In practice tag items often end up ordered by creation date anyways, just due to how databases work, but this was not a guarantee. If you wish to have the old behavior, set ``ordering=[]`` to your ``TaggableManager`` instance. We believe that this should not cause a noticable performance change, and the number of queries involved should not change. * Added the ability to merge tags via the admin * Add Django 5.0 support (no code changes were needed, but now we test this release). * Add Python 3.12 support * Add support for dumpdata/loaddata using natural keys 5.0.1 (2023-10-26) ~~~~~~~~~~~~~~~~~~ * Fix the package metadata to properly reflect the right Django and Python version requirements Release 5.0.0 improperly stated its Django bounds as >=3.2, so people installing without bounds will end up on a version that won't work. 5.0.0 (2023-10-24) ~~~~~~~~~~~~~~~~~~ * **Backwards icompatible:** Rename the (``content_type``, ``object_id``) index on ``TaggedItem``. It is very unlikely for this to affect your code itself, and a migration will rename the index. This should not cause any downtime according to my research (Postgres does not lock the table for index renames, and Oracle holds a tiny lock to do it, and the change is only to the metadata, so is not dependent on table size). * **Backwards incompatible:** Remove the ``.index_together`` and ``.unique_together`` attributes on ``TaggedItem`` We are instead using ``constraints`` and ``indexes`` to set up these properties. * Remove support for Django 3.2. * Remove usage of deprecated APIs for Django 4.2 * Remove support for Python 3.7 (no code changes involved) * Fix ``tag_kwargs`` and ``TAGGIT_CASE_INSENSITIVE=True`` discrepency. 4.0.0 (2023-05-04) ~~~~~~~~~~~~~~~~~~ * Remove Python 3.6 support (no code changes occurred, but we no longer test this release). * Remove Django 4.0 support (no code changes occurred, but we no longer test this release). * Add Django 4.2 support. 3.1.0 (2022-11-08) ~~~~~~~~~~~~~~~~~~ * Add Python 3.11 support (no code changes were needed, but now we test this release). * Add Django 4.1 support (no code changes were needed, but now we test this release). * Fixed an issue where object caches would not be properly cleared after updating tags, leading to stale reads in cases where ``prefetch_related`` is used. * Change ``TagListSerializerField`` to be a subclass of ``ListField``. This should improve support for API document generation. This change should not affect API behavior, but might affect metaprogramming code, so please procede carefully during this update. 3.0.0 (2022-05-02) ~~~~~~~~~~~~~~~~~~ * **Backwards incompatible:** Tag slugification used to silently strip non-ASCII characters from the tag name to make the slug. This leads to a lot of confusion for anyone using languages with non-latin alphabets, as well as weird performance issues. Tag slugification will now, by default, maintain unicode characters as-is during slugification. This will lead to less surprises, but might cause issues for you if you are expecting all of your tag slugs to fit within a regex like ``[a-zA-Z0-9]`` (for example in URL routing configurations). Generally speaking, this should not require action on your part as a library user, as existing tag slugs are persisted in the database, and only new tags will receive the enhanced unicode-compatible slug. If you wish to maintain the old stripping behavior, set the setting ``TAGGIT_STRIP_UNICODE_WHEN_SLUGIFYING`` to ``True``. As a reminder, custom tag models can easily customize slugification behavior by overriding the ``slugify`` method to your business needs. `` Drop Django 2.2 support. 2.1.0 (2022-01-24) ~~~~~~~~~~~~~~~~~~ * Add Python 3.10 support. * Add Django 4.0 support. * Drop Django 3.1 support. 2.0.0 (2021-11-14) ~~~~~~~~~~~~~~~~~~ * **Backwards incompatible:** ``TaggableManager.set`` now takes a list of tags (instead of varargs) so that its API matches Django's ``RelatedManager.set``. Example: - previously: ``item.tags.set("red", "blue")`` - now: ``item.tags.set(["red", "blue"])`` * Fix issue where ``TagField`` would incorrectly report that a field has changed on empty values. * Update Russian translation. * Add Persian translation * Fix issue for many languages where content types were not being properly translated. * Provide translators additional context regarding strings in TagBase model. 1.5.1 (2021-07-01) ~~~~~~~~~~~~~~~~~~ * Fix compiled Ukranian translation (which would cause a failure on load for this locale). * Update compiled Danish translation. 1.5.0 (2021-06-30) ~~~~~~~~~~~~~~~~~~ * Vendor in the `django-taggit-serializer` project (under `taggit.serializers`). * Add Arabic translation. * Add Ukranian translation. 1.4.0 (2021-04-19) ~~~~~~~~~~~~~~~~~~ * Add Python 3.9 support. * Remove Python 3.5 support. * Add Django 3.2 support. * Remove Django 1.11 and 3.0 support. * Add Danish translation. * Fix crashing that could occur with ``similar_objects`` in multi-inheritance contexts. * Add support for custom fields on through table models with `through_defaults` for ``TaggedManager.add`` and ``TaggedManager.set``. 1.3.0 (2020-05-19) ~~~~~~~~~~~~~~~~~~ * Model and field ``verbose_name`` and ``verbose_name_plural`` attributes are now lowercase. This simplifies using the name in the middle of a sentence. When used as a header, title, or at the beginning of a sentence, a text transformed can be used to adjust the case. * Fix prefetch_related when using UUIDTaggedItem. * Allow for passing in extra constructor parameters when using ``TaggableManager.add``. This is especially useful when using custom tag models. 1.2.0 (2019-12-03) ~~~~~~~~~~~~~~~~~~ * **Removed** support for end-of-life Django 2.0 and 2.1. * Added support for Django 3.0. * Added support for Python 3.8. * Moved ``TaggedItemBase.tags_for()`` to ItemBase. * Replaced reference to removed Django's ``.virtual_fields`` with ``.private_field``. * Added ``TextareaTagWidget``. 1.1.0 (2019-03-22) ~~~~~~~~~~~~~~~~~~ * Added Finnish translation. * Updated Chinese translation. * Updated Esperanto translation. * Fix ``form.changed_data`` to allow early access for a tags defined with ``blank=True``. 1.0.0 (2019-03-17) ~~~~~~~~~~~~~~~~~~ * **Backwards incompatible:** Remove support for Python 2. * Added ``has_changed()`` method to ``taggit.forms.TagField``. * Added multi-column unique constraint to model ``TaggedItem`` on fields ``content_type``, ``object_id``, and ``tag``. Databases that contain duplicates will need to add a data migration to resolve these duplicates. * Fixed ``TaggableManager.most_common()`` to always evaluate lazily. Allows placing a ``.most_common()`` query at the top level of a module. * Fixed setting the ``related_name`` on a tags manager that exists on a model named ``Name``. 0.24.0 (2019-02-19) ~~~~~~~~~~~~~~~~~~~ * The project has moved to `Jazzband `_. This is the first release under the new organization. The new repository URL is ``_. * Added support for Django 2.2. * Fixed a race condition in ``TaggableManager``. * Removed method ``ItemBase.bulk_lookup_kwargs()``. * Fixed view ``tagged_object_list`` to set ``queryset.model`` as ``ListView.model`` (was previously set as a ``ContentType`` instance). * ``_TaggableManager`` and ``TaggableManager`` now always call the parent class ``__init__``. * Removed ``TaggableRel`` and replaced uses with ``ManyToManyRel``. 0.23.0 (2018-08-07) ~~~~~~~~~~~~~~~~~~~ * **Backwards incompatible:** Remove support for Django < 1.11 * Added support for Django 2.1 and Python 3.7 * Moved TagWidget value conversion from TagWidget.render() to TagWidget.format_value() 0.22.2 (2017-12-27) ~~~~~~~~~~~~~~~~~~~ * Added support for Django 2.0 * **Backwards incompatible:** Dropped support for EOL Python 3.3 0.22.1 (2017-04-22) ~~~~~~~~~~~~~~~~~~~ * Update spanish translation * Add testing for Django 1.11 and Python 3.6 * introduce isort and flake8 in the CI * [docs] Fixed links to external apps * Improved auto-slug in TagBase to support UUID pk * [docs] Added contribution guidelines 0.22.0 (2017-01-29) ~~~~~~~~~~~~~~~~~~~ * **Backwards incompatible:** Drop support for Django 1.7 0.21.6 (2017-01-25) ~~~~~~~~~~~~~~~~~~~ * Fix case-insensitive tag creation when setting to a mix of new and existing tags are used 0.21.5 (2017-01-21) ~~~~~~~~~~~~~~~~~~~ * Check for case-insensitive duplicates when creating new tags 0.21.4 (2017-01-10) ~~~~~~~~~~~~~~~~~~~ * Support __gt__ and __lt__ ordering on Tags 0.21.3 (2016-10-07) ~~~~~~~~~~~~~~~~~~~ * Fix list view 0.21.2 (2016-08-31) ~~~~~~~~~~~~~~~~~~~ * Update Python version classifiers in setup.py * Add Greek translation 0.21.1 (2016-08-25) ~~~~~~~~~~~~~~~~~~~ * Document supported versions of Django; fix Travis to test these versions. 0.21.0 (2016-08-22) ~~~~~~~~~~~~~~~~~~~ * Fix form tests on Django 1.10 * Address list_display and fieldsets in admin docs * external_apps.txt improvements * Remove support for Django 1.4-1.6, again. 0.20.2 (2016-07-11) ~~~~~~~~~~~~~~~~~~~ * Add extra_filters argument to the manager's most_common method 0.20.1 (2016-06-23) ~~~~~~~~~~~~~~~~~~~ * Specify `app_label` for `Tag` and `TaggedItem` 0.20.0 (2016-06-19) ~~~~~~~~~~~~~~~~~~~ * Fix UnboundLocalError in _TaggableManager.set(..) * Update doc links to reflect RTD domain changes * Improve Russian translations 0.19.1 (2016-05-25) ~~~~~~~~~~~~~~~~~~~ * Add app config, add simplified Chinese translation file 0.19.0 (2016-05-23) ~~~~~~~~~~~~~~~~~~~ * Implementation of m2m_changed signal sending * Code and tooling improvements 0.18.3 (2016-05-12) ~~~~~~~~~~~~~~~~~~~ * Added Spanish and Turkish translations 0.18.2 (2016-05-08) ~~~~~~~~~~~~~~~~~~~ * Add the min_count parameter to managers.most_common function 0.18.1 (2016-03-30) ~~~~~~~~~~~~~~~~~~~ * Address deprecation warnings 0.18.0 (2016-01-18) ~~~~~~~~~~~~~~~~~~~ * Add option to override default tag string parsing * Drop support for Python 2.6 0.17.6 (2015-12-09) ~~~~~~~~~~~~~~~~~~~ * Silence Django 1.9 warning 0.17.5 (2015-11-27) ~~~~~~~~~~~~~~~~~~~ * Django 1.9 compatibility fix 0.17.4 (2015-11-25) ~~~~~~~~~~~~~~~~~~~ * Allows custom Through Model with GenericForeignKey 0.17.3 (2015-10-26) ~~~~~~~~~~~~~~~~~~~ * Silence Django 1.9 warning about on_delete 0.17.2 (2015-10-25) ~~~~~~~~~~~~~~~~~~~ * Django 1.9 beta compatibility 0.17.1 (2015-09-10) ~~~~~~~~~~~~~~~~~~~ * Fix unknown column `object_id` issue with Django 1.6+ 0.17.0 (2015-08-14) ~~~~~~~~~~~~~~~~~~~ * Database index added on TaggedItem fields content_type & object_id 0.16.4 (2015-08-13) ~~~~~~~~~~~~~~~~~~~ * Access default manager via class instead of instance 0.16.3 (2015-08-08) ~~~~~~~~~~~~~~~~~~~ * Prevent IntegrityError with custom TagBase classes 0.16.2 (2015-07-13) ~~~~~~~~~~~~~~~~~~~ * Fix an admin bug related to the `Manager` property `through_fields` 0.16.1 (2015-07-09) ~~~~~~~~~~~~~~~~~~~ * Fix bug that assumed all primary keys are named 'id' 0.16.0 (2015-07-04) ~~~~~~~~~~~~~~~~~~~ * Add option to allow case-insensitive tags 0.15.0 (2015-06-23) ~~~~~~~~~~~~~~~~~~~ * Fix wrong slugs for non-latin chars. Only works if optional GPL dependency (unidecode) is installed. 0.14.0 (2015-04-26) ~~~~~~~~~~~~~~~~~~~ * Prevent extra JOIN when prefetching * Prevent _meta warnings with Django 1.8 0.13.0 (2015-04-02) ~~~~~~~~~~~~~~~~~~~ * Django 1.8 support 0.12.3 (2015-03-03) ~~~~~~~~~~~~~~~~~~~ * Specify that the internal type of the TaggitManager is a ManyToManyField 0.12.2 (2014-21-09) ~~~~~~~~~~~~~~~~~~~ * Fixed 1.7 migrations. 0.12.1 (2014-10-08) ~~~~~~~~~~~~~~~~~~~ * Final (hopefully) fixes for the upcoming Django 1.7 release. * Added Japanese translation. 0.12.0 (2014-20-04) ~~~~~~~~~~~~~~~~~~~ * **Backwards incompatible:** Support for Django 1.7 migrations. South users have to set ``SOUTH_MIGRATION_MODULES`` to use ``taggit.south_migrations`` for taggit. * **Backwards incompatible:** Django's new transaction handling is used on Django 1.6 and newer. * **Backwards incompatible:** ``Tag.save`` got changed to opportunistically try to save the tag and if that fails fall back to selecting existing similar tags and retry -- if that fails too an ``IntegrityError`` is raised by the database, your app will have to handle that. * Added Italian and Esperanto translations. 0.11.2 (2013-13-12) ~~~~~~~~~~~~~~~~~~~ * Forbid multiple TaggableManagers via generic foreign keys. 0.11.1 (2013-25-11) ~~~~~~~~~~~~~~~~~~~ * Fixed support for Django 1.4 and 1.5. 0.11.0 (2013-25-11) ~~~~~~~~~~~~~~~~~~~ * Added support for prefetch_related on tags fields. * Fixed support for Django 1.7. * Made the tagging relations unserializeable again. * Allow more than one TaggableManager on models (assuming concrete FKs are used for the relations). 0.10.0 (2013-17-08) ~~~~~~~~~~~~~~~~~~~ * Support for Django 1.6 and 1.7. * Python3 support * **Backwards incompatible:** Dropped support for Django < 1.4.5. * Tag names are unique now, use the provided South migrations to upgrade. 0.9.2 (2011-01-17) ~~~~~~~~~~~~~~~~~~ * **Backwards incompatible:** Forms containing a :class:`TaggableManager` by default now require tags, to change this provide ``blank=True`` to the :class:`TaggableManager`. * Now works with Django 1.3 (as of beta-1). 0.9.0 (2010-09-22) ~~~~~~~~~~~~~~~~~~ * Added a Hebrew locale. * Added an index on the ``object_id`` field of ``TaggedItem``. * When displaying tags always join them with commas, never spaces. * The docs are now available `online `_. * Custom ``Tag`` models are now allowed. * **Backwards incompatible:** Filtering on tags is no longer ``filter(tags__in=["foo"])``, it is written ``filter(tags__name__in=["foo"])``. * Added a German locale. * Added a Dutch locale. * Removed ``taggit.contrib.suggest``, it now lives in an external application, see :doc:`external_apps` for more information. 0.8.0 (2010-06-22) ~~~~~~~~~~~~~~~~~~ * Fixed querying for objects using ``exclude(tags__in=tags)``. * Marked strings as translatable. * Added a Russian translation. * Created a `mailing list `_. * Smarter tagstring parsing for form field; ported from Jonathan Buchanan's `django-tagging `_. Now supports tags containing commas. See :ref:`tags-in-forms` for details. * Switched to using savepoints around the slug generation for tags. This ensures that it works fine on databases (such as Postgres) which dirty a transaction with an ``IntegrityError``. * Added Python 2.4 compatibility. * Added Django 1.1 compatibility. django-taggit-6.1.0/CODE_OF_CONDUCT.md000066400000000000000000000045071467620475500170620ustar00rootroot00000000000000# Code of Conduct As contributors and maintainers of the Jazzband projects, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. We are committed to making participation in the Jazzband a harassment-free experience for everyone, regardless of the level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. Examples of unacceptable behavior by participants include: - The use of sexualized language or imagery - Personal attacks - Trolling or insulting/derogatory comments - Public or private harassment - Publishing other's private information, such as physical or electronic addresses, without explicit permission - Other unethical or unprofessional conduct The Jazzband roadies have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. By adopting this Code of Conduct, the roadies commit themselves to fairly and consistently applying these principles to every aspect of managing the jazzband projects. Roadies who do not follow or enforce the Code of Conduct may be permanently removed from the Jazzband roadies. This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the roadies at `roadies@jazzband.co`. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Roadies are obligated to maintain confidentiality with regard to the reporter of an incident. This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.3.0, available at [https://contributor-covenant.org/version/1/3/0/][version] [homepage]: https://contributor-covenant.org [version]: https://contributor-covenant.org/version/1/3/0/ django-taggit-6.1.0/CONTRIBUTING.rst000066400000000000000000000072461467620475500167270ustar00rootroot00000000000000Contributing to django-taggit ============================= .. image:: https://jazzband.co/static/img/jazzband.svg :target: https://jazzband.co/ :alt: Jazzband This is a `Jazzband `_ project. By contributing you agree to abide by the `Contributor Code of Conduct `_ and follow the `guidelines `_. Thank you for taking the time to contribute to django-taggit. Follow these guidelines to speed up the process. Reach out before you start -------------------------- Before opening a new issue, look if somebody else has already started working on the same issue in the `GitHub issues `_ and `pull requests `_. Fork the repository ------------------- Once you have forked this repository to your own GitHub account, install your own fork in your development environment: .. code-block:: console git clone git@github.com:/django-taggit.git cd django-taggit python setup.py develop Running tests ------------- django-taggit uses `tox `_ to run tests: .. code-block:: console tox Running the sample application ------------------------------ There is a sample application in ``sample_taggit``. You can run it by doing the following: **Prepare the Database** ~~~~~~~~~~~~~~~~~~~~~~~~ Use the `reset-db` command to prepare your database. This will remove any existing data, run migrations, and load fixtures, including creating a default admin user. **On Windows:** .. code-block:: console cd sample_taggit call make.bat reset-db **On Mac/Linux:** .. code-block:: console cd sample_taggit make reset-db **Launch the Sample Project** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Launch the sample project itself with: .. code-block:: console sample_taggit/manage.py runserver **Default Admin User Login:** Username: taggit Password: admin Follow style conventions (black, flake8, isort) ----------------------------------------------- Check that your changes are not breaking the style conventions with: .. code-block:: console tox -e black,flake8,isort Update the documentation ------------------------ If you introduce new features or change existing documented behavior, please remember to update the documentation. The documentation is located in the ``docs`` directory of the repository. To do work on the docs, proceed with the following steps: .. code-block:: console pip install sphinx sphinx-build -n -W docs docs/_build Add a changelog line -------------------- Even when the change is minor, a changelog line is helpful to both describe the intent of the change, and to give a heads up to people upgrading. You can add a line in the ``(Unreleased)`` section of ``CHANGELOG.rst``, along with any more detailed explanations for more complicated changes. Send pull request ----------------- It is now time to push your changes to GitHub and open a `pull request `_! Release Checklist ----------------- These steps need to happen by a release maintainer. To make a release, the following needs to happen: - Make sure that ``setup.cfg`` is set up properly w/r/t Python and Django requirements - Make sure the documentation (``docs/index.rst``) also describes the right Python/Django versions - Bump the version number in ``taggit/__init__.py`` - Update the changelog (making sure to add the (Unreleased) section to the top) - Get those changes onto the ``master`` branch - Tag the commit with the version number - CI should then upload a release to be verified through Jazzband django-taggit-6.1.0/LICENSE000066400000000000000000000030321467620475500152600ustar00rootroot00000000000000Copyright (c) Alex Gaynor, Paul Oostenrijk, and individual contributors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of django-taggit nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. django-taggit-6.1.0/MANIFEST.in000066400000000000000000000004111467620475500160070ustar00rootroot00000000000000include AUTHORS include CHANGELOG.rst include LICENSE include README.rst include setup.cfg include setup.py recursive-include taggit *.py recursive-include taggit/templates *.html recursive-include taggit/locale *.mo *.po prune tests prune sample_taggit prune docs django-taggit-6.1.0/README.rst000066400000000000000000000040771467620475500157540ustar00rootroot00000000000000django-taggit ============= .. image:: https://jazzband.co/static/img/badge.svg :target: https://jazzband.co/ :alt: Jazzband .. image:: https://img.shields.io/pypi/pyversions/django-taggit.svg :target: https://pypi.org/project/django-taggit/ :alt: Supported Python versions .. image:: https://img.shields.io/pypi/djversions/django-taggit.svg :target: https://pypi.org/project/django-taggit/ :alt: Supported Django versions .. image:: https://github.com/jazzband/django-taggit/workflows/Test/badge.svg :target: https://github.com/jazzband/django-taggit/actions :alt: GitHub Actions .. image:: https://codecov.io/gh/jazzband/django-taggit/coverage.svg?branch=master :target: https://codecov.io/gh/jazzband/django-taggit?branch=master This is a `Jazzband `_ project. By contributing you agree to abide by the `Contributor Code of Conduct `_ and follow the `guidelines `_. ``django-taggit`` a simpler approach to tagging with Django. Add ``"taggit"`` to your ``INSTALLED_APPS`` then just add a TaggableManager to your model and go: .. code:: python from django.db import models from taggit.managers import TaggableManager class Food(models.Model): # ... fields here tags = TaggableManager() Then you can use the API like so: .. code:: pycon >>> apple = Food.objects.create(name="apple") >>> apple.tags.add("red", "green", "delicious") >>> apple.tags.all() [, , ] >>> apple.tags.remove("green") >>> apple.tags.all() [, ] >>> Food.objects.filter(tags__name__in=["red"]) [, ] Tags will show up for you automatically in forms and the admin. ``django-taggit`` requires Django 3.2 or greater. For more info check out the `documentation `_. And for questions about usage or development you can create an issue on Github (if your question is about usage please add the `question` tag). django-taggit-6.1.0/docs/000077500000000000000000000000001467620475500152055ustar00rootroot00000000000000django-taggit-6.1.0/docs/admin.rst000066400000000000000000000041251467620475500170310ustar00rootroot00000000000000Using tags in the admin ======================= By default if you have a :class:`TaggableManager` on your model it will show up in the admin, just as it will in any other form. If you are specifying :attr:`ModelAdmin.fieldsets `, include the name of the :class:`TaggableManager` as a field:: fieldsets = ( (None, {'fields': ('tags',)}), ) Including tags in ``ModelAdmin.list_display`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ One important thing to note is that you *cannot* include a :class:`TaggableManager` in :attr:`ModelAdmin.list_display `. If you do you'll see an exception that looks like:: AttributeError: '_TaggableManager' object has no attribute 'name' This is for the same reason that you cannot include a :class:`~django.db.models.ManyToManyField`: it would result in an unreasonable number of queries being executed. If you want to show tags in :attr:`ModelAdmin.list_display `, you can add a custom display method to the :class:`~django.contrib.admin.ModelAdmin`, using :meth:`~django.db.models.query.QuerySet.prefetch_related` to minimize queries:: class MyModelAdmin(admin.ModelAdmin): list_display = ['tag_list'] def get_queryset(self, request): return super().get_queryset(request).prefetch_related('tags') def tag_list(self, obj): return u", ".join(o.name for o in obj.tags.all()) Merging tags in the admin ~~~~~~~~~~~~~~~~~~~~~~~~~ Functionality has been added to the admin app to allow for tag "merging". Multiple tags can be selected, and all of their usages will be replaced by the tag that you choose to use. To merge your tags follow these steps: 1. Navigate to the Tags page inside of the Taggit app 2. Select the tags that you want to merge 3. Use the dropdown action list and select `Merge selected tags` and then click `Go` 4. This will redirect you onto a new page where you can insert the new tag name. 5. Click `Merge Tags` 6. This will redirect you back to the tag list django-taggit-6.1.0/docs/api.rst000066400000000000000000000104541467620475500165140ustar00rootroot00000000000000The API ======= After you've got your ``TaggableManager`` added to your model you can start playing around with the API. .. class:: TaggableManager([verbose_name="Tags", help_text="A comma-separated list of tags.", through=None, blank=False]) :param verbose_name: The verbose_name for this field. :param help_text: The help_text to be used in forms (including the admin). :param through: The through model, see :doc:`custom_tagging` for more information. :param blank: Controls whether this field is required. .. method:: add(*tags, through_defaults=None, tag_kwargs=None) This adds tags to an object. The tags can be either ``Tag`` instances, or strings:: >>> apple.tags.all() [] >>> apple.tags.add("red", "green", "fruit") Use the ``through_defaults`` argument to specify values for your custom ``through`` model, if needed. The ``tag_kwargs`` argument allows one to specify parameters for the tags themselves. .. method:: remove(*tags) Removes a tag from an object. No exception is raised if the object doesn't have that tag. .. method:: clear() Removes all tags from an object. .. method:: set(tags, *, through_defaults=None, clear=False) If ``clear = True`` removes all the current tags and then adds the specified tags to the object. Otherwise sets the object's tags to those specified, removing only the missing tags and adding only the new tags. Use the ``through_defaults`` argument to specify values for your custom ``through`` model, if needed. .. method: most_common() Returns a ``QuerySet`` of all tags, annotated with the number of times they appear, available as the ``num_times`` attribute on each tag. The ``QuerySet``is ordered by ``num_times``, descending. The ``QuerySet`` is lazily evaluated, and can be sliced efficiently. :param min_count: Specify a min count to limit the returned queryset .. method:: similar_objects() Returns a list (not a lazy ``QuerySet``) of other objects tagged similarly to this one, ordered with most similar first. Each object in the list is decorated with a ``similar_tags`` attribute, the number of tags it shares with this object. If the model is using generic tagging (the default), this method searches tagged objects from all classes. If you are querying on a model with its own tagging through table, only other instances of the same model will be returned. .. method:: names() Convenience method, returning a ``ValuesListQuerySet`` (basically just an iterable) containing the name of each tag as a string:: >>> apple.tags.names() ["green and juicy", "red"] .. method:: slugs() Convenience method, returning a ``ValuesListQuerySet`` (basically just an iterable) containing the slug of each tag as a string:: >>> apple.tags.slugs() ["green-and-juicy", "red"] .. hint:: You can subclass ``_TaggableManager`` (note the underscore) to add methods or functionality. ``TaggableManager`` takes an optional manager keyword argument for your custom class, like this:: class Food(models.Model): # ... fields here tags = TaggableManager(manager=_CustomTaggableManager) Filtering ~~~~~~~~~ To find all of a model with a specific tags you can filter, using the normal Django ORM API. For example if you had a ``Food`` model, whose ``TaggableManager`` was named ``tags``, you could find all the delicious fruit like so:: >>> Food.objects.filter(tags__name__in=["delicious"]) [, , ] If you're filtering on multiple tags, it's very common to get duplicate results, because of the way relational databases work. Often you'll want to make use of the ``distinct()`` method on ``QuerySets``:: >>> Food.objects.filter(tags__name__in=["delicious", "red"]) [, ] >>> Food.objects.filter(tags__name__in=["delicious", "red"]).distinct() [] You can also filter by the slug on tags. If you're using a custom ``Tag`` model you can use this API to filter on any fields it has. django-taggit-6.1.0/docs/changelog.rst000066400000000000000000000000361467620475500176650ustar00rootroot00000000000000.. include:: ../CHANGELOG.rst django-taggit-6.1.0/docs/conf.py000066400000000000000000000007741467620475500165140ustar00rootroot00000000000000import taggit extensions = ["sphinx.ext.intersphinx"] master_doc = "index" project = "django-taggit" copyright = "Alex Gaynor and individual contributors." # The short X.Y version. version = taggit.__version__ # The full version, including alpha/beta/rc tags. release = taggit.__version__ intersphinx_mapping = { "django": ( "https://docs.djangoproject.com/en/stable", "https://docs.djangoproject.com/en/stable/_objects/", ), "python": ("https://docs.python.org/3", None), } django-taggit-6.1.0/docs/contributing.rst000066400000000000000000000000411467620475500204410ustar00rootroot00000000000000.. include:: ../CONTRIBUTING.rst django-taggit-6.1.0/docs/custom_tagging.rst000066400000000000000000000202361467620475500207540ustar00rootroot00000000000000Customizing taggit ================== Using a Custom Tag or Through Model ----------------------------------- By default ``django-taggit`` uses a "through model" with a ``GenericForeignKey`` on it, that has another ``ForeignKey`` to an included ``Tag`` model. However, there are some cases where this isn't desirable, for example if you want the speed and referential guarantees of a real ``ForeignKey``, if you have a model with a non-integer primary key, or if you want to store additional data about a tag, such as whether it is official. In these cases ``django-taggit`` makes it easy to substitute your own through model, or ``Tag`` model. Note: Including 'taggit' in ``settings.py`` INSTALLED_APPS list will create the default ``django-taggit`` and "through model" models. If you would like to use your own models, you will need to remove 'taggit' from ``settings.py``'s INSTALLED_APPS list. To change the behavior there are a number of classes you can subclass to obtain different behavior: =============================== ======================================================================= Class name Behavior =============================== ======================================================================= ``TaggedItemBase`` Allows custom ``ForeignKeys`` to models. ``GenericTaggedItemBase`` Allows custom ``Tag`` models. Tagged models use an integer primary key. ``GenericUUIDTaggedItemBase`` Allows custom ``Tag`` models. Tagged models use a UUID primary key. ``CommonGenericTaggedItemBase`` Allows custom ``Tag`` models and ``GenericForeignKeys`` to models. ``ItemBase`` Allows custom ``Tag`` models and ``ForeignKeys`` to models. =============================== ======================================================================= Custom ForeignKeys ~~~~~~~~~~~~~~~~~~ Your intermediary model must be a subclass of ``taggit.models.TaggedItemBase`` with a foreign key to your content model named ``content_object``. Pass this intermediary model as the ``through`` argument to ``TaggableManager``: .. code-block:: python from django.db import models from taggit.managers import TaggableManager from taggit.models import TaggedItemBase class TaggedFood(TaggedItemBase): content_object = models.ForeignKey('Food', on_delete=models.CASCADE) class Food(models.Model): # ... fields here tags = TaggableManager(through=TaggedFood) Once this is done, the API works the same as for GFK-tagged models. Custom GenericForeignKeys ~~~~~~~~~~~~~~~~~~~~~~~~~ The default ``GenericForeignKey`` used by ``django-taggit`` assume your tagged object use an integer primary key. For non-integer primary key, your intermediary model must be a subclass of ``taggit.models.CommonGenericTaggedItemBase`` with a field named ``"object_id"`` of the type of your primary key. For example, if your primary key is a string: .. code-block:: python from django.db import models from taggit.managers import TaggableManager from taggit.models import CommonGenericTaggedItemBase, TaggedItemBase class GenericStringTaggedItem(CommonGenericTaggedItemBase, TaggedItemBase): object_id = models.CharField(max_length=50, verbose_name=_('Object id'), db_index=True) class Food(models.Model): food_id = models.CharField(primary_key=True) # ... fields here tags = TaggableManager(through=GenericStringTaggedItem) GenericUUIDTaggedItemBase ~~~~~~~~~~~~~~~~~~~~~~~~~ A common use case of a non-integer primary key, is UUID primary key. ``django-taggit`` provides a base class ``GenericUUIDTaggedItemBase`` ready to use with models using an UUID primary key: .. code-block:: python from django.db import models from django.utils.translation import gettext_lazy as _ from taggit.managers import TaggableManager from taggit.models import GenericUUIDTaggedItemBase, TaggedItemBase class UUIDTaggedItem(GenericUUIDTaggedItemBase, TaggedItemBase): # If you only inherit GenericUUIDTaggedItemBase, you need to define # a tag field. e.g. # tag = models.ForeignKey(Tag, related_name="uuid_tagged_items", on_delete=models.CASCADE) class Meta: verbose_name = _("Tag") verbose_name_plural = _("Tags") class Food(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # ... fields here tags = TaggableManager(through=UUIDTaggedItem) Custom tag ~~~~~~~~~~ When providing a custom ``Tag`` model it should be a ``ForeignKey`` to your tag model named ``"tag"``. If your custom ``Tag`` model has extra parameters you want to initialize during setup, you can do so by passing it along via the ``tag_kwargs`` parameter of ``TaggableManager.add``. For example ``my_food.tags.add("tag_name1", "tag_name2", tag_kwargs={"my_field":3})``: .. code-block:: python from django.db import models from django.utils.translation import gettext_lazy as _ from taggit.managers import TaggableManager from taggit.models import TagBase, GenericTaggedItemBase class MyCustomTag(TagBase): # ... fields here class Meta: verbose_name = _("Tag") verbose_name_plural = _("Tags") # ... methods (if any) here class TaggedWhatever(GenericTaggedItemBase): # TaggedWhatever can also extend TaggedItemBase or a combination of # both TaggedItemBase and GenericTaggedItemBase. GenericTaggedItemBase # allows using the same tag for different kinds of objects, in this # example Food and Drink. # Here is where you provide your custom Tag class. tag = models.ForeignKey( MyCustomTag, on_delete=models.CASCADE, related_name="%(app_label)s_%(class)s_items", ) class Food(models.Model): # ... fields here tags = TaggableManager(through=TaggedWhatever) class Drink(models.Model): # ... fields here tags = TaggableManager(through=TaggedWhatever) .. class:: TagBase .. method:: slugify(tag, i=None) By default ``taggit`` uses :func:`django.utils.text.slugify` to calculate a slug for a given tag. However, if you want to implement your own logic you can override this method, which receives the ``tag`` (a string), and ``i``, which is either ``None`` or an integer, which signifies how many times the slug for this tag has been attempted to be calculated, it is ``None`` on the first time, and the counting begins at ``1`` thereafter. Using a custom tag string parser -------------------------------- By default ``django-taggit`` uses ``taggit.utils._parse_tags`` which accepts a string which may contain one or more tags and returns a list of tag names. This parser is quite intelligent and can handle a number of edge cases; however, you may wish to provide your own parser for various reasons (e.g. you can do some preprocessing on the tags so that they are converted to lowercase, reject certain tags, disallow certain characters, split only on commas rather than commas and whitespace, etc.). To provide your own parser, write a function that takes a tag string and returns a list of tag names. For example, a simple function to split on comma and convert to lowercase: .. code-block:: python def comma_splitter(tag_string): return [t.strip().lower() for t in tag_string.split(',') if t.strip()] You need to tell ``taggit`` to use this function instead of the default by adding a new setting, ``TAGGIT_TAGS_FROM_STRING`` and providing it with the dotted path to your function. Likewise, you can provide a function to convert a list of tags to a string representation and use the setting ``TAGGIT_STRING_FROM_TAGS`` to override the default value (which is ``taggit.utils._edit_string_for_tags``): .. code-block:: python def comma_joiner(tags): return ', '.join(t.name for t in tags) If the functions above were defined in a module, ``appname.utils``, then your project settings.py file should contain the following: .. code-block:: python TAGGIT_TAGS_FROM_STRING = 'appname.utils.comma_splitter' TAGGIT_STRING_FROM_TAGS = 'appname.utils.comma_joiner' django-taggit-6.1.0/docs/external_apps.rst000066400000000000000000000040541467620475500206070ustar00rootroot00000000000000External Applications ===================== In addition to the features included in ``django-taggit`` directly, there are a number of external applications which provide additional features that may be of interest. .. note:: Despite their mention here, the following applications are in no way official, nor have they in any way been reviewed or tested. If you have an application that you'd like to see listed here, simply fork `django-taggit on github `_, add it to this list, and send a pull request. * `django-taggit-anywhere `_: Simpler approach to tagging with ``taggit``. Additionally this project provides easy-to-use integration with ``django-taggit-helpers`` and ``django-taggit-labels``. * `django-taggit-helpers `_: Makes it easier to work with admin pages of models associated with ``taggit`` tags by adding helper classes: ``TaggitCounter``, ``TaggitListFilter``, ``TaggitStackedInline``, ``TaggitTabularInline``. * `django-taggit-labels `_: Provides a clickable label widget for the Django admin for user friendly selection from managed tag sets. * `django-taggit-serializer `_: Adds functionality for using ``taggit`` with ``django-rest-framework``. * `django-taggit-suggest `_: Provides support for defining keyword and regular expression rules for suggesting new tags for content. This used to be available at ``taggit.contrib.suggest``. * `django-taggit-templatetags `_: Provides several templatetags, including one for tag clouds, to expose various ``taggit`` APIs directly to templates. * `django-taggit-bulk `_: An admin action for the bulk tagging from the model admin instance list view. django-taggit-6.1.0/docs/faq.rst000066400000000000000000000020401467620475500165020ustar00rootroot00000000000000Frequently Asked Questions ========================== - How can I get all my tags? If you are using just an out-of-the-box setup, your tags are stored in the `Tag` model (found in `taggit.models`). If this is a custom model (for example you have your own models derived from `ItemBase`), then you'll need to query that one instead. So if you are using the standard setup, ``Tag.objects.all()`` will give you the tags. - How can I use this with factory_boy? Since these are all built off of many-to-many relationships, you can check out `factory_boy's documentation on this topic `_ and get some ideas on how to deal with tags. One way to handle this is with post-generation hooks:: class ProductFactory(DjangoModelFactory): # Rest of the stuff @post_generation def tags(self, create, extracted, **kwargs): if not create: return if extracted: self.tags.add(*extracted) django-taggit-6.1.0/docs/forms.rst000066400000000000000000000045121467620475500170670ustar00rootroot00000000000000.. _tags-in-forms: Tags in forms ============= The ``TaggableManager`` will show up automatically as a field in a ``ModelForm`` or in the admin. Tags input via the form field are parsed as follows: * If the input doesn't contain any commas or double quotes, it is simply treated as a space-delimited list of tag names. * If the input does contain either of these characters: * Groups of characters which appear between double quotes take precedence as multi-word tags (so double quoted tag names may contain commas). An unclosed double quote will be ignored. * Otherwise, if there are any unquoted commas in the input, it will be treated as comma-delimited. If not, it will be treated as space-delimited. Examples: ====================== ================================= ================================================ Tag input string Resulting tags Notes ====================== ================================= ================================================ apple ball cat ``["apple", "ball", "cat"]`` No commas, so space delimited apple, ball cat ``["apple", "ball cat"]`` Comma present, so comma delimited "apple, ball" cat dog ``["apple, ball", "cat", "dog"]`` All commas are quoted, so space delimited "apple, ball", cat dog ``["apple, ball", "cat dog"]`` Contains an unquoted comma, so comma delimited apple "ball cat" dog ``["apple", "ball cat", "dog"]`` No commas, so space delimited "apple" "ball dog ``["apple", "ball", "dog"]`` Unclosed double quote is ignored ====================== ================================= ================================================ ``commit=False`` ~~~~~~~~~~~~~~~~ If, when saving a form, you use the ``commit=False`` option you'll need to call ``save_m2m()`` on the form after you save the object, just as you would for a form with normal many to many fields on it:: if request.method == "POST": form = MyFormClass(request.POST) if form.is_valid(): obj = form.save(commit=False) obj.user = request.user obj.save() # Without this next line the tags won't be saved. form.save_m2m() You can check the details over in the `Django documentation on form saving `_. django-taggit-6.1.0/docs/getting_started.rst000066400000000000000000000031751467620475500211340ustar00rootroot00000000000000Getting Started =============== To get started using ``django-taggit`` simply install it with ``pip``:: $ pip install django-taggit Add ``"taggit"`` to your project's ``INSTALLED_APPS`` setting. Run `./manage.py migrate`. And then to any model you want tagging on do the following:: from django.db import models from taggit.managers import TaggableManager class Food(models.Model): # ... fields here tags = TaggableManager() .. note:: If you want ``django-taggit`` to be **CASE-INSENSITIVE** when looking up existing tags, you'll have to set ``TAGGIT_CASE_INSENSITIVE`` (in ``settings.py`` or wherever you have your Django settings) to ``True`` (``False`` by default):: TAGGIT_CASE_INSENSITIVE = True Settings -------- The following Django-level settings affect the behavior of the library * ``TAGGIT_CASE_INSENSITIVE`` When set to ``True``, tag lookups will be case insensitive. This defaults to ``False``. * ``TAGGIT_STRIP_UNICODE_WHEN_SLUGIFYING`` When this is set to ``True``, tag slugs will be limited to ASCII characters. In this case, if you also have ``unidecode`` installed, then tag sluggification will transform a tag like ``ã‚ã„ ã†ãˆãŠ`` to ``ai-ueo``. If you do not have ``unidecode`` installed, then you will usually be outright stripping unicode, meaning that something like ``helloã‚ã„`` will be slugified as ``hello``. This value defaults to ``False``, meaning that unicode is preserved in slugification. Because the behavior when ``True`` is set leads to situations where slugs can be entirely stripped to an empty string, we recommend not activating this. django-taggit-6.1.0/docs/index.rst000066400000000000000000000010111467620475500170370ustar00rootroot00000000000000Welcome to django-taggit's documentation! ========================================= ``django-taggit`` is a reusable Django application designed to make adding tagging to your project easy and fun. ``django-taggit`` works with Django 4.1+ and Python 3.8+. .. toctree:: :maxdepth: 2 getting_started forms admin serializers testing api faq custom_tagging contributing external_apps changelog Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` django-taggit-6.1.0/docs/serializers.rst000066400000000000000000000014061467620475500202740ustar00rootroot00000000000000Usage With Django Rest Framework ================================ Because the tags in `django-taggit` need to be added into a `TaggableManager()` we cannot use the usual `Serializer` that we get from Django REST Framework. Because this is trying to save the tags into a `list`, which will throw an exception. To accept tags through a `REST` API call we need to add the following to our `Serializer`:: from taggit.serializers import (TagListSerializerField, TaggitSerializer) class YourSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField() class Meta: model = YourModel fields = '__all__' And you're done, so now you can add tags to your model. django-taggit-6.1.0/docs/testing.rst000066400000000000000000000011771467620475500174220ustar00rootroot00000000000000Testing ======= Natural Key Support ------------------- We have added `natural key support `_ to the Tag model in the Django taggit library. This allows you to identify objects by human-readable identifiers rather than by their database ID:: python manage.py dumpdata taggit.Tag --natural-foreign --natural-primary > tags.json python manage.py loaddata tags.json By default tags use the name field as the natural key. You can customize this in your own custom tag model by setting the ``natural_key_fields`` property on your model the required fields. django-taggit-6.1.0/requirements/000077500000000000000000000000001467620475500170005ustar00rootroot00000000000000django-taggit-6.1.0/requirements/docs.txt000066400000000000000000000000251467620475500204660ustar00rootroot00000000000000Sphinx docutils<0.18 django-taggit-6.1.0/requirements/test.txt000066400000000000000000000000251467620475500205150ustar00rootroot00000000000000Django>=3.2 coverage django-taggit-6.1.0/sample_taggit/000077500000000000000000000000001467620475500170755ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/__init__.py000066400000000000000000000000001467620475500211740ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/asgi.py000066400000000000000000000006231467620475500203730ustar00rootroot00000000000000""" ASGI config for sample_taggit project. It exposes the ASGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/ """ import os from django.core.asgi import get_asgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample_taggit.settings") application = get_asgi_application() django-taggit-6.1.0/sample_taggit/fixtures/000077500000000000000000000000001467620475500207465ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/fixtures/0001_users.json000066400000000000000000000007201467620475500234410ustar00rootroot00000000000000[ { "model": "auth.user", "pk": 1, "fields": { "password": "pbkdf2_sha256$720000$KnQUl5xpmqQF2aWaANeHIG$kO4C7iRjRpDfUNwWgvXyCtmfoCQqOHUTHCO2IvrH58U=", "last_login": "2024-07-28T13:26:52.011Z", "is_superuser": true, "username": "taggit", "first_name": "", "last_name": "", "email": "", "is_staff": true, "is_active": true, "date_joined": "2024-07-27T17:02:40.676Z", "groups": [], "user_permissions": [] } } ] django-taggit-6.1.0/sample_taggit/fixtures/0002_author.json000066400000000000000000000742771467620475500236250ustar00rootroot00000000000000[ { "model": "library_management.author", "pk": 1, "fields": { "first_name": "Norman", "last_name": "Black", "middle_name": "Michele", "birth_date": "1953-03-17", "biography": "Democratic power technology worker strategy seek significant. Threat but have.\nExpert wrong inside subject type with. Make Republican sell crime chance least gas." } }, { "model": "library_management.author", "pk": 2, "fields": { "first_name": "Michelle", "last_name": "Barton", "middle_name": "Travis", "birth_date": "1989-08-21", "biography": "Happy seem type. Class career act work market home them. Rich four method they.\nSpring away usually mind. Week bill deal factor Democrat." } }, { "model": "library_management.author", "pk": 3, "fields": { "first_name": "Bernard", "last_name": "Miller", "middle_name": "Madeline", "birth_date": "1914-11-28", "biography": "Perform fund great already. Every seek alone community often including.\nAble room within matter raise sit. Fine growth per treat same whole cut. Card next film beat idea campaign." } }, { "model": "library_management.author", "pk": 4, "fields": { "first_name": "Shannon", "last_name": "Jones", "middle_name": "Theresa", "birth_date": "1989-07-20", "biography": "Represent but chair. Suggest surface soon door people certainly.\nRecognize seat feel office sport design issue. Begin could campaign product training reduce newspaper easy. Major radio now." } }, { "model": "library_management.author", "pk": 5, "fields": { "first_name": "Susan", "last_name": "Wright", "middle_name": "Karen", "birth_date": "2021-12-07", "biography": "Their discuss democratic popular mission exist. Something skin with popular such without.\nResult technology during. Kitchen team as final so minute." } }, { "model": "library_management.author", "pk": 6, "fields": { "first_name": "Phillip", "last_name": "Hernandez", "middle_name": "Lori", "birth_date": "1984-08-01", "biography": "Or church film herself speech benefit job. First affect few son her. Campaign prevent state major community management." } }, { "model": "library_management.author", "pk": 7, "fields": { "first_name": "Nicholas", "last_name": "Dunn", "middle_name": "Jose", "birth_date": "2010-02-24", "biography": "Information factor me war own color. Third particular charge. Sound apply member them. Walk have candidate try international floor." } }, { "model": "library_management.author", "pk": 8, "fields": { "first_name": "David", "last_name": "Campos", "middle_name": "Suzanne", "birth_date": "1952-09-14", "biography": "Agree available hospital pressure trial worry. Central show enjoy get century. Half amount PM maybe goal the anything. Church through begin father understand." } }, { "model": "library_management.author", "pk": 9, "fields": { "first_name": "Tina", "last_name": "Allen", "middle_name": "Laura", "birth_date": "1916-12-06", "biography": "Democrat spend appear. Money month fly beat paper cover staff. Community across low threat here.\nUp standard doctor order. Race require owner shake foot strong tough." } }, { "model": "library_management.author", "pk": 10, "fields": { "first_name": "Eric", "last_name": "Alexander", "middle_name": "Andrew", "birth_date": "1961-03-05", "biography": "Kid discover reach require. Ability cost degree four in often foreign either.\nActually sing look stuff company candidate. Ok discuss painting perhaps cultural. Policy wind can Mr bank along." } }, { "model": "library_management.author", "pk": 11, "fields": { "first_name": "Teresa", "last_name": "Cameron", "middle_name": "Monica", "birth_date": "1997-03-10", "biography": "Certain alone herself form yes may. Entire offer week anything later glass business.\nLoss actually since national model activity scene. Purpose speech when national entire population." } }, { "model": "library_management.author", "pk": 12, "fields": { "first_name": "Brian", "last_name": "Lowe", "middle_name": "Chad", "birth_date": "1954-10-03", "biography": "Provide might heart dream just set.\nPerform story truth above these. Property far cell explain. Against gun peace room medical similar true." } }, { "model": "library_management.author", "pk": 13, "fields": { "first_name": "Edward", "last_name": "Wells", "middle_name": "Anthony", "birth_date": "2009-11-07", "biography": "Decide newspaper fight article fast least. Wall continue carry part debate there two. Total rule someone write leader." } }, { "model": "library_management.author", "pk": 14, "fields": { "first_name": "Kathleen", "last_name": "Orr", "middle_name": "William", "birth_date": "1915-02-20", "biography": "Economic cup north television walk part fish. Security management cell service avoid. Pay attorney debate you help sea.\nSeek family technology represent. Tonight list feel it why line in." } }, { "model": "library_management.author", "pk": 15, "fields": { "first_name": "Jaime", "last_name": "Munoz", "middle_name": "Ruben", "birth_date": "2017-09-17", "biography": "Example main center. Road young education understand fast media.\nFeeling understand window so resource draw. News federal out would southern. Stuff see since." } }, { "model": "library_management.author", "pk": 16, "fields": { "first_name": "Mark", "last_name": "Chase", "middle_name": "William", "birth_date": "2008-08-22", "biography": "East show medical board tend. They candidate here sport between explain.\nItself pattern eat painting. Plant smile total." } }, { "model": "library_management.author", "pk": 17, "fields": { "first_name": "Austin", "last_name": "Stewart", "middle_name": "Tiffany", "birth_date": "1972-03-11", "biography": "Money full order want. Other laugh value current population ahead story.\nLevel arrive indeed seat pressure. Sound response commercial address rather." } }, { "model": "library_management.author", "pk": 18, "fields": { "first_name": "Haley", "last_name": "Lane", "middle_name": "Kenneth", "birth_date": "1922-10-26", "biography": "Main tell inside he house.\nAs whether event player she sea consider. Stay Republican new scene piece item nothing laugh. So on religious method newspaper occur without." } }, { "model": "library_management.author", "pk": 19, "fields": { "first_name": "Tiffany", "last_name": "Martinez", "middle_name": "Robert", "birth_date": "1950-07-14", "biography": "Good assume Congress artist enough. Series summer half pull. Perform low hold company figure article." } }, { "model": "library_management.author", "pk": 20, "fields": { "first_name": "Michael", "last_name": "Acosta", "middle_name": "Amanda", "birth_date": "1992-07-21", "biography": "Eight condition research eight wall. Enough media grow. Guess television enter PM fight." } }, { "model": "library_management.author", "pk": 21, "fields": { "first_name": "Steven", "last_name": "Sawyer", "middle_name": "Donna", "birth_date": "1967-10-14", "biography": "Deep marriage because perhaps stock. Suffer analysis study big majority break ahead.\nService officer growth four my set world. War full today contain.\nAhead blood choice Congress stage." } }, { "model": "library_management.author", "pk": 22, "fields": { "first_name": "Gregory", "last_name": "Mathews", "middle_name": "Steven", "birth_date": "1994-06-23", "biography": "Recognize amount all scene lot type.\nManagement among miss TV. Sense reach information service site.\nPolicy poor with card stay several lot.\nIt contain reality. For performance about for." } }, { "model": "library_management.author", "pk": 23, "fields": { "first_name": "Allen", "last_name": "Le", "middle_name": "Paul", "birth_date": "1973-12-27", "biography": "Item seven quite one model reduce. Likely difference great. Help answer who seek hospital sometimes somebody several." } }, { "model": "library_management.author", "pk": 24, "fields": { "first_name": "Alexandra", "last_name": "Mckinney", "middle_name": "Samantha", "birth_date": "1995-05-30", "biography": "Spend we born on hospital plant manager. Number east good step feel. Early mother member establish worker travel kid minute." } }, { "model": "library_management.author", "pk": 25, "fields": { "first_name": "Pamela", "last_name": "Cunningham", "middle_name": "Emily", "birth_date": "1909-06-18", "biography": "None drive here perform nothing person else. Country ok artist back approach would society. Notice itself per theory.\nTable language figure go itself. Sit Republican recent wife eye not unit head." } }, { "model": "library_management.author", "pk": 26, "fields": { "first_name": "Katie", "last_name": "Cooper", "middle_name": "Anthony", "birth_date": "1988-01-13", "biography": "Old quite own already. Turn same few voice himself sit TV success. Return threat himself yeah." } }, { "model": "library_management.author", "pk": 27, "fields": { "first_name": "Andrew", "last_name": "French", "middle_name": "Ricky", "birth_date": "1989-10-10", "biography": "Message quality many key close identify term. So mouth list around street woman keep.\nAbove form speech table operation bed hear. Trouble card individual anything will special assume scene." } }, { "model": "library_management.author", "pk": 28, "fields": { "first_name": "Michael", "last_name": "Owens", "middle_name": "Anita", "birth_date": "1928-12-29", "biography": "Full generation much. Buy until game base form believe. Glass cover section writer standard word hundred. Miss baby environmental teach." } }, { "model": "library_management.author", "pk": 29, "fields": { "first_name": "Jenny", "last_name": "Perry", "middle_name": "Kyle", "birth_date": "1945-07-26", "biography": "Level color level happy difference soon. Cultural act employee hand wear.\nWho management country." } }, { "model": "library_management.author", "pk": 30, "fields": { "first_name": "Brian", "last_name": "Strong", "middle_name": "Gary", "birth_date": "1985-01-16", "biography": "Hear father vote training. Agreement show system here east. Door situation raise help according lot." } }, { "model": "library_management.author", "pk": 31, "fields": { "first_name": "Mary", "last_name": "Green", "middle_name": "Shelly", "birth_date": "1989-07-22", "biography": "Study water of truth recently out country. Technology generation and try usually.\nMagazine artist rule whether score. Sure whom name wide cost.\nApproach while force heart investment people federal." } }, { "model": "library_management.author", "pk": 32, "fields": { "first_name": "Jesse", "last_name": "Johnson", "middle_name": "Shaun", "birth_date": "1912-11-20", "biography": "Claim education leg. Spring democratic along official address. Beautiful break group face still.\nThemselves political such nothing. Huge wrong realize wish. Capital tough loss computer do simply." } }, { "model": "library_management.author", "pk": 33, "fields": { "first_name": "Felicia", "last_name": "Hall", "middle_name": "David", "birth_date": "1929-07-23", "biography": "Republican officer ago once power space inside actually. Art TV produce. Individual ok budget letter method sit. There first environmental." } }, { "model": "library_management.author", "pk": 34, "fields": { "first_name": "Mark", "last_name": "Mueller", "middle_name": "James", "birth_date": "1931-12-13", "biography": "Activity three cut teach trial on. Value black four before. Bill community media among future marriage much. Process control goal from treat red watch.\nShare partner require order per." } }, { "model": "library_management.author", "pk": 35, "fields": { "first_name": "Michael", "last_name": "Carroll", "middle_name": "Christine", "birth_date": "2006-05-17", "biography": "Suffer hot down expect study rule bag difficult. Station middle animal yes work prove present." } }, { "model": "library_management.author", "pk": 36, "fields": { "first_name": "John", "last_name": "Carlson", "middle_name": "Ryan", "birth_date": "1950-07-08", "biography": "Find continue student state operation song successful. Fund too also share day join. Game us anything draw become usually.\nOk well factor while. One read world maybe land able choice." } }, { "model": "library_management.author", "pk": 37, "fields": { "first_name": "Leslie", "last_name": "Brown", "middle_name": "Nancy", "birth_date": "1910-01-09", "biography": "Skin stay movement PM five production worker. Allow receive yet professional once. Finish hit before reveal interesting cut.\nVoice peace start eight also worry simply. Seek enough value good." } }, { "model": "library_management.author", "pk": 38, "fields": { "first_name": "Charles", "last_name": "Elliott", "middle_name": "Seth", "birth_date": "1975-12-19", "biography": "Affect fly dream poor result feel bag. Attention everything national lot.\nCharacter onto investment experience sometimes crime want. Scientist near yeah require. Like eat writer suddenly staff." } }, { "model": "library_management.author", "pk": 39, "fields": { "first_name": "Teresa", "last_name": "Norman", "middle_name": "Gina", "birth_date": "2010-11-11", "biography": "Effect majority our trouble first trouble no. Budget country serious at miss never rate. Resource believe hotel I conference.\nDiscover tend draw total. Society meeting floor they image." } }, { "model": "library_management.author", "pk": 40, "fields": { "first_name": "Megan", "last_name": "Thompson", "middle_name": "Michelle", "birth_date": "2009-03-09", "biography": "Offer share term. Writer represent according finally though. Check much whom trouble focus Congress team. One save everything century." } }, { "model": "library_management.author", "pk": 41, "fields": { "first_name": "Michelle", "last_name": "Jones", "middle_name": "David", "birth_date": "1910-09-24", "biography": "Campaign project memory. Budget director best toward method.\nOften surface house reason. Continue expert sense keep seat. What offer probably degree." } }, { "model": "library_management.author", "pk": 42, "fields": { "first_name": "Kyle", "last_name": "Cline", "middle_name": "Isabel", "birth_date": "1964-04-03", "biography": "May rest agency power. Would phone religious necessary assume five as. Respond herself Congress sea.\nCell light yourself senior put. Budget real above identify source. Play fly air." } }, { "model": "library_management.author", "pk": 43, "fields": { "first_name": "William", "last_name": "Simpson", "middle_name": "Stacy", "birth_date": "2019-01-31", "biography": "Main put hotel economic. Property natural new listen.\nMessage factor system debate hot building prevent. Form may assume bag any whatever." } }, { "model": "library_management.author", "pk": 44, "fields": { "first_name": "Johnathan", "last_name": "Obrien", "middle_name": "Heather", "birth_date": "1914-05-19", "biography": "Among surface shake audience when same read. Especially specific dinner question card." } }, { "model": "library_management.author", "pk": 45, "fields": { "first_name": "Michael", "last_name": "Martinez", "middle_name": "John", "birth_date": "1957-04-22", "biography": "Focus receive imagine many wonder design my. Bar lose once fight bad do ground. Free represent impact defense gun.\nVery including suffer left need can. Trial write begin." } }, { "model": "library_management.author", "pk": 46, "fields": { "first_name": "Heather", "last_name": "Thompson", "middle_name": "Jessica", "birth_date": "1999-01-02", "biography": "Father probably car. Whole return realize eye Mr sell. Avoid popular who soldier.\nArea executive why suggest. Spring remember model consider detail." } }, { "model": "library_management.author", "pk": 47, "fields": { "first_name": "Ronald", "last_name": "Gibbs", "middle_name": "Tina", "birth_date": "2000-07-05", "biography": "Peace at visit hope. Fast writer Republican manage I method word prevent. Always school offer thus bar. Method result develop shoulder project technology idea." } }, { "model": "library_management.author", "pk": 48, "fields": { "first_name": "Eric", "last_name": "Sanchez", "middle_name": "Thomas", "birth_date": "1917-09-10", "biography": "Reveal simply man enter president. Fly clearly wide page.\nDesign term doctor notice lot. Focus space sell successful red learn energy. Region financial spend strong travel interview." } }, { "model": "library_management.author", "pk": 49, "fields": { "first_name": "Mary", "last_name": "Turner", "middle_name": "Amber", "birth_date": "1958-07-21", "biography": "Over skin describe down sort. None share exist computer.\nKitchen prove give sound. Start take though section south political thousand treat." } }, { "model": "library_management.author", "pk": 50, "fields": { "first_name": "Nathaniel", "last_name": "Flores", "middle_name": "James", "birth_date": "1926-09-17", "biography": "Answer home upon instead night despite. Network newspaper wonder five seven.\nAge next attention term natural trade. Prepare seem former everybody poor worker manage." } }, { "model": "library_management.author", "pk": 51, "fields": { "first_name": "Billy", "last_name": "Irwin", "middle_name": "Christina", "birth_date": "1939-12-22", "biography": "Capital enjoy somebody my center notice. If daughter identify international prove.\nWindow population nothing increase prevent us particularly democratic." } }, { "model": "library_management.author", "pk": 52, "fields": { "first_name": "Ashlee", "last_name": "Coffey", "middle_name": "Tami", "birth_date": "1978-05-30", "biography": "Investment part present. Citizen dog suffer method about nation key development. Close perform oil view when." } }, { "model": "library_management.author", "pk": 53, "fields": { "first_name": "Amy", "last_name": "Boyd", "middle_name": "Monica", "birth_date": "1955-11-25", "biography": "Affect main pay year cultural care wind. Answer occur nice discussion enough. Difficult year off up behavior away start.\nParty good responsibility friend people. Debate from such figure." } }, { "model": "library_management.author", "pk": 54, "fields": { "first_name": "Mike", "last_name": "Yu", "middle_name": "Mike", "birth_date": "2020-01-24", "biography": "Account significant today. Will within community agree natural send.\nEveryone about just inside vote. Office region boy paper picture fast community." } }, { "model": "library_management.author", "pk": 55, "fields": { "first_name": "Steven", "last_name": "Stuart", "middle_name": "Shelia", "birth_date": "2001-01-07", "biography": "Something service shake cause. Walk claim a positive general phone effect.\nTalk person also reduce box. Certainly maintain computer project who responsibility. Happy tree before win adult." } }, { "model": "library_management.author", "pk": 56, "fields": { "first_name": "Amanda", "last_name": "Mercado", "middle_name": "Omar", "birth_date": "2013-11-27", "biography": "Fall day ability news church. Its young network sing. Evidence rule seek sort follow anything." } }, { "model": "library_management.author", "pk": 57, "fields": { "first_name": "Kelly", "last_name": "Wood", "middle_name": "Jennifer", "birth_date": "2001-09-24", "biography": "Suddenly apply also theory one standard whom. Soldier minute theory campaign such.\nProduct herself road artist piece. Small receive so allow reflect." } }, { "model": "library_management.author", "pk": 58, "fields": { "first_name": "Joseph", "last_name": "Stokes", "middle_name": "Thomas", "birth_date": "1989-01-26", "biography": "Mind change night power detail anyone. Least determine young exactly. Daughter direction former will owner media collection. Question American last enough." } }, { "model": "library_management.author", "pk": 59, "fields": { "first_name": "Jonathan", "last_name": "Blake", "middle_name": "Sarah", "birth_date": "1921-03-06", "biography": "Drug director present range. This either hard.\nDream toward prove.\nMy onto member nearly school free social. Itself owner mission let board. Significant street property." } }, { "model": "library_management.author", "pk": 60, "fields": { "first_name": "Karen", "last_name": "Williams", "middle_name": "Paul", "birth_date": "1951-09-07", "biography": "Inside conference cover quality responsibility bad more. Budget consider concern long forget plant human. Trouble push especially newspaper simple behind find fund." } }, { "model": "library_management.author", "pk": 61, "fields": { "first_name": "Henry", "last_name": "Martinez", "middle_name": "Morgan", "birth_date": "1995-12-23", "biography": "Tell five fund former. Plan woman space quickly now still rate.\nWestern along week year. Person once blue stock central. Rest evening third soon." } }, { "model": "library_management.author", "pk": 62, "fields": { "first_name": "Stephen", "last_name": "Robinson", "middle_name": "Michael", "birth_date": "2003-04-03", "biography": "Billion road success. Practice smile computer both police poor major. Young TV tend reflect skin political camera.\nLoss now hotel stand have well truth. List whole stuff those." } }, { "model": "library_management.author", "pk": 63, "fields": { "first_name": "Randall", "last_name": "Vargas", "middle_name": "Cynthia", "birth_date": "2009-01-01", "biography": "Seem threat family budget meet. Night number them away specific assume look method. Present send new summer bank despite." } }, { "model": "library_management.author", "pk": 64, "fields": { "first_name": "Maria", "last_name": "Robbins", "middle_name": "Kevin", "birth_date": "2018-07-21", "biography": "Piece wall debate might. Feel reduce make say card." } }, { "model": "library_management.author", "pk": 65, "fields": { "first_name": "Brittney", "last_name": "Graham", "middle_name": "Paul", "birth_date": "1973-04-29", "biography": "Morning leader dark space herself son. Next power beyond last something you scientist professor. City how represent night.\nBillion option middle." } }, { "model": "library_management.author", "pk": 66, "fields": { "first_name": "Maria", "last_name": "Fitzpatrick", "middle_name": "Juan", "birth_date": "1925-01-12", "biography": "Beat who reach talk. Hair cold bring quickly support skill pass.\nPower lawyer four happy gas he enter. Wear similar themselves occur customer think process standard." } }, { "model": "library_management.author", "pk": 67, "fields": { "first_name": "Lance", "last_name": "Banks", "middle_name": "Robert", "birth_date": "2020-03-30", "biography": "Alone or interesting. Whatever window power third government garden. Executive always party across ago music.\nFinally attorney money. She alone power magazine energy significant nor." } }, { "model": "library_management.author", "pk": 68, "fields": { "first_name": "Shelby", "last_name": "Vang", "middle_name": "Louis", "birth_date": "1964-06-11", "biography": "You live cold marriage dog really capital. Wall we gas race today physical color.\nHis true another page case either. Model purpose gas risk mean partner data. Only perform alone stand report then." } }, { "model": "library_management.author", "pk": 69, "fields": { "first_name": "Matthew", "last_name": "Gardner", "middle_name": "Natalie", "birth_date": "1927-03-13", "biography": "Study camera relationship total live management. Success season assume help management reduce. Staff what fear full hospital." } }, { "model": "library_management.author", "pk": 70, "fields": { "first_name": "Kathleen", "last_name": "Riddle", "middle_name": "Erika", "birth_date": "2004-11-29", "biography": "Course spring adult right source. Sign the art author. Require bag happy type degree whatever PM." } }, { "model": "library_management.author", "pk": 71, "fields": { "first_name": "Robert", "last_name": "Glover", "middle_name": "Shawn", "birth_date": "1974-04-29", "biography": "Senior responsibility structure. Store paper building trial.\nProperty keep floor hair or. Vote single join produce. Can sister nice create.\nWhat resource hand politics continue often." } }, { "model": "library_management.author", "pk": 72, "fields": { "first_name": "Sheila", "last_name": "Li", "middle_name": "Cory", "birth_date": "2005-12-10", "biography": "Crime maybe plan lot by billion. Senior reason you dog keep with.\nCommercial bit join she southern ok. Audience Republican trial system goal want." } }, { "model": "library_management.author", "pk": 73, "fields": { "first_name": "Cory", "last_name": "Rhodes", "middle_name": "Mary", "birth_date": "1977-01-23", "biography": "Management Mr become wide oil most. Go name five true girl. Contain almost store or. May exist quickly right.\nRecord course share doctor. Increase office mother next." } }, { "model": "library_management.author", "pk": 74, "fields": { "first_name": "Michael", "last_name": "Stokes", "middle_name": "Edward", "birth_date": "2024-07-17", "biography": "Free attorney film. Cut deal oil agree claim available. Determine choice appear our night.\nCharacter use game yes family. Ground PM ready yet detail. Design reduce technology mind land again." } }, { "model": "library_management.author", "pk": 75, "fields": { "first_name": "Danielle", "last_name": "Tucker", "middle_name": "David", "birth_date": "2016-03-22", "biography": "Most paper century walk east single. Do performance spring into.\nTechnology possible cause fund father yourself past. Take discuss music tax hold under.\nDraw already best sense. Hard short half." } }, { "model": "library_management.author", "pk": 76, "fields": { "first_name": "Melinda", "last_name": "Acosta", "middle_name": "Jessica", "birth_date": "1969-05-10", "biography": "Seem when something paper same audience activity. Thank good two plant smile.\r\nBeautiful require alone we turn key. Along tough party option organization choose. Financial stop produce skin." } }, { "model": "library_management.author", "pk": 77, "fields": { "first_name": "Stephanie", "last_name": "Moreno", "middle_name": "Paul", "birth_date": "1934-02-09", "biography": "Because I eye. Coach loss stay.\nStart top early edge answer me. Behavior none themselves more." } }, { "model": "library_management.author", "pk": 78, "fields": { "first_name": "Michael", "last_name": "Nguyen", "middle_name": "Brittney", "birth_date": "1981-03-15", "biography": "Window report scene company mission. Article respond response husband." } }, { "model": "library_management.author", "pk": 79, "fields": { "first_name": "Oscar", "last_name": "Joyce", "middle_name": "Marissa", "birth_date": "1934-02-12", "biography": "Something thus conference sound well.\nCapital less mind city business. Argue community set than prepare.\nStudy hundred event among administration." } }, { "model": "library_management.author", "pk": 80, "fields": { "first_name": "Kimberly", "last_name": "Foster", "middle_name": "James", "birth_date": "1976-07-22", "biography": "Gas develop student team. High six agency director per idea response hit.\nBuild event value girl whose you your lay. Give paper try detail. Maybe staff want development stock source." } }, { "model": "library_management.author", "pk": 81, "fields": { "first_name": "James", "last_name": "Garcia", "middle_name": "Frederick", "birth_date": "2018-08-19", "biography": "Wait discuss high official. Them body watch however wide stock. Drive tend dog certain. Life population take.\nSkill western throughout change large hand. Still realize maybe week." } }, { "model": "library_management.author", "pk": 82, "fields": { "first_name": "Robert", "last_name": "Brown", "middle_name": "Ashley", "birth_date": "2022-09-26", "biography": "Himself military return figure land. Soon letter serious there space thousand term.\nShoulder example statement and recent occur thank." } }, { "model": "library_management.author", "pk": 83, "fields": { "first_name": "Connie", "last_name": "Bradley", "middle_name": "Shannon", "birth_date": "1967-12-12", "biography": "Dark beyond camera sometimes capital others public pay. Fight safe might understand training tend visit claim. Surface majority after recognize cold." } }, { "model": "library_management.author", "pk": 84, "fields": { "first_name": "Kim", "last_name": "Hamilton", "middle_name": "Ann", "birth_date": "2000-11-19", "biography": "From response team federal right. Former recognize home six. Major collection manage home trouble among.\nLeft chair success forward small big board. Whether president give." } }, { "model": "library_management.author", "pk": 85, "fields": { "first_name": "Nancy", "last_name": "Myers", "middle_name": "Elizabeth", "birth_date": "1992-04-10", "biography": "Power like group. By would adult red kind believe make. Cause parent add soldier wide.\nConference floor former theory. Act change cost hotel right get ball. Media station positive site play relate." } } ] django-taggit-6.1.0/sample_taggit/fixtures/0003_book_type.json000066400000000000000000000011541467620475500242770ustar00rootroot00000000000000[ { "model": "library_management.booktype", "pk": 1, "fields": { "slug": "hardcover", "name": "Hardcover" } }, { "model": "library_management.booktype", "pk": 2, "fields": { "slug": "paperback", "name": "Paperback" } }, { "model": "library_management.booktype", "pk": 3, "fields": { "slug": "e-book", "name": "E-book" } }, { "model": "library_management.booktype", "pk": 4, "fields": { "slug": "audiobook", "name": "Audiobook" } }, { "model": "library_management.booktype", "pk": 5, "fields": { "slug": "magazine", "name": "Magazine" } } ] django-taggit-6.1.0/sample_taggit/fixtures/0004_books.json000066400000000000000000002163751467620475500234370ustar00rootroot00000000000000[ { "model": "library_management.book", "pk": 1, "fields": { "name": "Media above itself.", "author": 39, "published_date": "2008-11-04", "isbn": "978-1-339-03043-2", "summary": "Business current TV great lay into care. Recognize minute method loss.\r\nVote young pressure usually. Drive hour send production order meet. Organization at experience despite occur." } }, { "model": "library_management.book", "pk": 2, "fields": { "name": "Discussion media well give.", "author": 51, "published_date": "1993-07-18", "isbn": "978-1-01-308335-8", "summary": "About exist my business letter. Together change stuff population. Some conference ground than method." } }, { "model": "library_management.book", "pk": 3, "fields": { "name": "Dog sit understand coach shoulder.", "author": 55, "published_date": "2002-11-08", "isbn": "978-1-5130-4058-5", "summary": "Something those natural themselves the friend. Official throughout government politics treatment support memory. Memory sort become television land. Hope girl your doctor material image office." } }, { "model": "library_management.book", "pk": 4, "fields": { "name": "Wide word medical color.", "author": 22, "published_date": "2008-04-05", "isbn": "978-0-589-41384-2", "summary": "Easy consider call staff produce never. Window someone allow how.\nTen her himself might eye close. Tough may soldier lead. Environment take home sort." } }, { "model": "library_management.book", "pk": 5, "fields": { "name": "Leg thus family.", "author": 1, "published_date": "1984-04-11", "isbn": "978-0-560-97189-7", "summary": "Wide garden necessary. Investment seat term account himself financial." } }, { "model": "library_management.book", "pk": 6, "fields": { "name": "Congress school certain.", "author": 71, "published_date": "2008-11-13", "isbn": "978-0-02-039493-8", "summary": "Father second plant dark. Give seven place most. Ask forget Republican city to finish." } }, { "model": "library_management.book", "pk": 7, "fields": { "name": "Analysis notice glass where.", "author": 55, "published_date": "1978-01-26", "isbn": "978-0-271-79138-8", "summary": "Product cause operation parent game still crime billion. Part blood forward computer often. Wind since group choose." } }, { "model": "library_management.book", "pk": 8, "fields": { "name": "Shake suggest sea.", "author": 23, "published_date": "1977-11-03", "isbn": "978-0-11-262574-2", "summary": "Point tough future follow direction leg government. Size TV free cultural goal pressure wife." } }, { "model": "library_management.book", "pk": 9, "fields": { "name": "Tonight marriage size.", "author": 6, "published_date": "2021-12-08", "isbn": "978-1-02-196540-0", "summary": "System lot garden school weight. Stock find candidate fast produce protect wish. Campaign view likely season available." } }, { "model": "library_management.book", "pk": 10, "fields": { "name": "Spend world age.", "author": 20, "published_date": "1996-04-17", "isbn": "978-1-185-21639-4", "summary": "Feeling represent design place mission station trip. Team surface truth low investment outside." } }, { "model": "library_management.book", "pk": 11, "fields": { "name": "Politics up meeting.", "author": 59, "published_date": "1973-11-01", "isbn": "978-1-69108-227-8", "summary": "Mind new allow various mouth. Mention toward yard specific move.\nEven natural process through. Recently big catch compare including continue special. One skill want three message." } }, { "model": "library_management.book", "pk": 12, "fields": { "name": "South make some enjoy.", "author": 48, "published_date": "2003-01-03", "isbn": "978-0-202-28220-6", "summary": "Choose they north apply. Without teach team even.\nInformation my source generation live mention. Might husband within finally. Officer store reveal popular." } }, { "model": "library_management.book", "pk": 13, "fields": { "name": "Game employee course run pick.", "author": 28, "published_date": "1978-01-12", "isbn": "978-1-5150-6911-9", "summary": "Institution his world method fish. Without those commercial party agreement agree under arm." } }, { "model": "library_management.book", "pk": 14, "fields": { "name": "Decide effort couple without.", "author": 49, "published_date": "1970-09-25", "isbn": "978-0-06-040611-0", "summary": "Address everyone war through plant sell season. Wonder name example one. Board piece receive tough mention major." } }, { "model": "library_management.book", "pk": 15, "fields": { "name": "Animal people thus.", "author": 43, "published_date": "1977-08-31", "isbn": "978-0-907840-63-3", "summary": "Kid fine involve trial industry. Hospital final sound. Pressure once us social response hot capital. Both race sign fight our." } }, { "model": "library_management.book", "pk": 16, "fields": { "name": "Heart clearly once style.", "author": 8, "published_date": "2022-07-08", "isbn": "978-0-518-25687-8", "summary": "May lawyer less data. Break month political future machine wonder. Establish safe set. Score beyond option sort.\nBank hand wait degree officer. Scientist improve near national out thus next." } }, { "model": "library_management.book", "pk": 17, "fields": { "name": "Where today billion poor.", "author": 33, "published_date": "2008-05-30", "isbn": "978-0-8114-2057-0", "summary": "Radio adult town director writer perform direction. Fall wrong test college. Beat rather natural several oil prepare develop.\nCamera woman number government yeah resource. And only he theory while." } }, { "model": "library_management.book", "pk": 18, "fields": { "name": "Realize near.", "author": 30, "published_date": "2004-08-15", "isbn": "978-1-67634-668-5", "summary": "Exist market that spend. Watch stand mean pressure take. Air already until expert behind drug its participant.\nOur star herself worker build situation important. None write common both culture seem." } }, { "model": "library_management.book", "pk": 19, "fields": { "name": "Short information account.", "author": 32, "published_date": "2004-09-21", "isbn": "978-1-60095-268-5", "summary": "Deep fish cost face Republican eye. Their hundred scientist mention. Well begin position opportunity couple Democrat allow." } }, { "model": "library_management.book", "pk": 20, "fields": { "name": "Admit able trouble improve.", "author": 54, "published_date": "1973-10-17", "isbn": "978-1-06-680242-5", "summary": "Edge on daughter crime short season month seek. Song name yard able ready short. Analysis culture direction party somebody my. Eat detail goal player nation necessary surface." } }, { "model": "library_management.book", "pk": 21, "fields": { "name": "Spring kind step hope.", "author": 47, "published_date": "1989-04-23", "isbn": "978-0-8159-8419-1", "summary": "Control member over pattern. Effect fire its member where. News hospital middle resource do it. Behind writer cultural." } }, { "model": "library_management.book", "pk": 22, "fields": { "name": "Discuss program PM deal describe.", "author": 5, "published_date": "2019-01-07", "isbn": "978-0-282-99674-1", "summary": "Case account sit defense rule describe take sign. Weight style try from notice.\nMemory language glass indeed the book nor travel. Still why enjoy six." } }, { "model": "library_management.book", "pk": 23, "fields": { "name": "Sometimes personal.", "author": 9, "published_date": "1993-11-22", "isbn": "978-0-527-12500-4", "summary": "Administration rate rather alone trial individual. Bed could enjoy. Glass imagine suggest effect.\nParty magazine human officer. Condition contain do not smile perform. Leg physical practice thing." } }, { "model": "library_management.book", "pk": 24, "fields": { "name": "White goal.", "author": 64, "published_date": "2018-10-02", "isbn": "978-0-9666157-9-1", "summary": "Cut director specific do. Sometimes she speak sing. Positive provide compare partner fund.\nYear page away. Win recent purpose hotel sit." } }, { "model": "library_management.book", "pk": 25, "fields": { "name": "Before lawyer.", "author": 13, "published_date": "2013-11-30", "isbn": "978-0-683-58437-0", "summary": "Real current strong speech couple. Personal executive paper investment yeah bank stop.\nCould you read energy western teach finally. Heart than it down source work." } }, { "model": "library_management.book", "pk": 26, "fields": { "name": "Will tell walk significant.", "author": 67, "published_date": "2021-12-08", "isbn": "978-1-78212-426-9", "summary": "Put think son whatever responsibility result year. Politics third enter city than listen church." } }, { "model": "library_management.book", "pk": 27, "fields": { "name": "Onto guy.", "author": 33, "published_date": "2022-11-25", "isbn": "978-0-430-60976-9", "summary": "End likely organization. Seem local traditional analysis. Record light prevent personal act nature.\nLikely part mean like language factor. None fear town matter. Almost activity economic reveal." } }, { "model": "library_management.book", "pk": 28, "fields": { "name": "Chance point only wind.", "author": 70, "published_date": "2022-12-20", "isbn": "978-0-433-97041-5", "summary": "Couple race coach pick week worker. History wrong director message east hope school consumer." } }, { "model": "library_management.book", "pk": 29, "fields": { "name": "Enjoy drive look say.", "author": 56, "published_date": "2023-09-08", "isbn": "978-1-03-794082-8", "summary": "Should improve in natural. Cultural ok financial several. Impact authority individual game." } }, { "model": "library_management.book", "pk": 30, "fields": { "name": "Question speech tax.", "author": 31, "published_date": "2009-10-05", "isbn": "978-0-249-39037-7", "summary": "Development manage answer nice. Between prove peace act mouth. Ready or treat peace north statement.\nSecond Congress wish really nation report. Only though sort laugh situation." } }, { "model": "library_management.book", "pk": 31, "fields": { "name": "Year agree investment.", "author": 58, "published_date": "2015-10-26", "isbn": "978-1-82958-186-4", "summary": "Business for lose pattern new speech. Drug economy perhaps animal. Four my fall north." } }, { "model": "library_management.book", "pk": 32, "fields": { "name": "Miss degree throw.", "author": 35, "published_date": "1995-02-12", "isbn": "978-0-7313-9662-7", "summary": "Election two interview. Son low could they sometimes. Cold building scientist although newspaper.\nGo sea total upon daughter. Despite trade three than." } }, { "model": "library_management.book", "pk": 33, "fields": { "name": "Century main but crime.", "author": 49, "published_date": "2013-09-09", "isbn": "978-1-76477-253-2", "summary": "Teacher I information guess meet attention letter.\nMention ready chance specific a send pattern. Employee stop describe wrong." } }, { "model": "library_management.book", "pk": 34, "fields": { "name": "Son air however notice.", "author": 38, "published_date": "1991-08-13", "isbn": "978-1-398-55834-2", "summary": "Method reality friend admit.\nHim nation pressure born lawyer doctor huge. Within specific animal usually. Protect challenge space American rich five daughter." } }, { "model": "library_management.book", "pk": 35, "fields": { "name": "Moment trip.", "author": 61, "published_date": "1987-02-25", "isbn": "978-1-7380428-5-2", "summary": "Cause current agent end region family. Gas goal pull live.\nKind summer environmental a without support family. Receive run right good. List couple edge care along although goal." } }, { "model": "library_management.book", "pk": 36, "fields": { "name": "Paper administration air office.", "author": 59, "published_date": "1989-02-18", "isbn": "978-0-8475-8728-5", "summary": "Sit important you really ever ability campaign why. Player court assume land interesting store common.\nResearch and owner professional loss should seat." } }, { "model": "library_management.book", "pk": 37, "fields": { "name": "Forward agent help measure cover.", "author": 25, "published_date": "2003-09-02", "isbn": "978-1-870726-65-8", "summary": "Growth half question fly standard mean. Chance more thought same. Detail staff act compare." } }, { "model": "library_management.book", "pk": 38, "fields": { "name": "Provide politics major look culture.", "author": 37, "published_date": "2021-01-26", "isbn": "978-1-74709-546-7", "summary": "Speak nearly research trip under art. Table stage firm single office family individual. Strong chair participant top another." } }, { "model": "library_management.book", "pk": 39, "fields": { "name": "Color smile process front study.", "author": 61, "published_date": "2012-04-11", "isbn": "978-1-347-18534-6", "summary": "Player simple do always state. Recent close name development offer.\nRecent piece idea security open oil let. Draw prove live produce nation. Step movie build yard town somebody board difficult." } }, { "model": "library_management.book", "pk": 40, "fields": { "name": "Car record entire.", "author": 37, "published_date": "1987-11-02", "isbn": "978-0-398-27922-6", "summary": "Audience pattern fund account their owner nor. Now to perhaps arm argue southern safe. Owner poor ahead property business.\nGuy safe father ever a agree specific. Drug thus hit music." } }, { "model": "library_management.book", "pk": 41, "fields": { "name": "Staff try our.", "author": 39, "published_date": "1985-07-17", "isbn": "978-0-431-16061-0", "summary": "Building partner I focus TV music. Tv issue security major left again similar. Always analysis need attention. Drug quite article impact word once candidate." } }, { "model": "library_management.book", "pk": 42, "fields": { "name": "Reflect appear.", "author": 31, "published_date": "1995-02-28", "isbn": "978-0-85767-769-3", "summary": "Blood performance ready and off. Consider stay describe beyond rich. Its pattern they sell than." } }, { "model": "library_management.book", "pk": 43, "fields": { "name": "Drug stay.", "author": 38, "published_date": "2019-01-05", "isbn": "978-1-72397-156-3", "summary": "Spring wear red sport marriage rate. Reduce nice professor idea keep direction loss.\nSound reduce beyond thing great draw specific player. Person increase TV measure garden set." } }, { "model": "library_management.book", "pk": 44, "fields": { "name": "Because any budget.", "author": 63, "published_date": "1970-05-24", "isbn": "978-1-151-14210-8", "summary": "Call third score important every help. Stage natural nation civil. College sing sit issue someone however. Enough area challenge throughout." } }, { "model": "library_management.book", "pk": 45, "fields": { "name": "Close teach fact present.", "author": 28, "published_date": "1971-06-30", "isbn": "978-0-444-10283-6", "summary": "Suddenly song gas husband garden particular. Debate speech manager nature management partner.\nNorth pull decide. Wall morning easy. Time enjoy industry morning remember exactly." } }, { "model": "library_management.book", "pk": 46, "fields": { "name": "Scene citizen modern.", "author": 7, "published_date": "2019-08-01", "isbn": "978-1-223-25890-4", "summary": "Sign discuss fund so at. Why before training ever.\nSave air expect establish be whole child case. Machine base new record tough half according. Light his century very hard for." } }, { "model": "library_management.book", "pk": 47, "fields": { "name": "Citizen product simply one scene.", "author": 35, "published_date": "1978-05-12", "isbn": "978-1-4408-4490-4", "summary": "Start contain politics official speech two. Itself look do technology.\nMaybe when economy like arrive lay. Project those how meet. Ten wife article attorney agency way." } }, { "model": "library_management.book", "pk": 48, "fields": { "name": "Thousand you what tell home.", "author": 70, "published_date": "1984-11-05", "isbn": "978-1-5361-4863-3", "summary": "Step picture race news team. Lay yard million although. Star employee learn pull leg hold risk.\nMove live think walk. Gas perhaps simple. Budget Congress generation.\nIssue expect child answer once." } }, { "model": "library_management.book", "pk": 49, "fields": { "name": "Join exist whom water.", "author": 43, "published_date": "2011-06-09", "isbn": "978-1-5062-2492-3", "summary": "Operation bring probably without. Attention painting authority go.\nNo similar such claim sea difference. Relationship without democratic four form if. Move others authority occur population enjoy." } }, { "model": "library_management.book", "pk": 50, "fields": { "name": "Trip ahead force still sense.", "author": 63, "published_date": "2005-02-01", "isbn": "978-0-02-608791-9", "summary": "Card choose become idea range fine stand him. Nice goal adult wall." } }, { "model": "library_management.book", "pk": 51, "fields": { "name": "Some agent sing.", "author": 6, "published_date": "2016-08-20", "isbn": "978-0-201-70011-4", "summary": "Defense well new term. President some laugh population nothing staff.\r\nShow smile must that. Top magazine quickly almost get practice third deep. Human performance almost nature everybody charge." } }, { "model": "library_management.book", "pk": 52, "fields": { "name": "Star international fish.", "author": 50, "published_date": "2021-07-08", "isbn": "978-1-231-39432-8", "summary": "System live difficult. Exist goal analysis like box edge nearly western.\nSave exist could item add. Treat also prove way senior protect field environmental. Nearly school body back thank." } }, { "model": "library_management.book", "pk": 53, "fields": { "name": "So international week answer.", "author": 22, "published_date": "1994-04-15", "isbn": "978-1-58051-452-1", "summary": "Measure garden long or.\nStart move course fact there approach scientist no. Plan federal everybody town difference. Brother conference similar." } }, { "model": "library_management.book", "pk": 54, "fields": { "name": "Administration election model not.", "author": 54, "published_date": "2010-07-09", "isbn": "978-1-190-01476-3", "summary": "Pm which effect future industry or health. Which argue opportunity carry fine national easy." } }, { "model": "library_management.book", "pk": 55, "fields": { "name": "Read turn.", "author": 61, "published_date": "2018-06-24", "isbn": "978-0-10-316048-1", "summary": "Base section number. Between can maintain break few.\nStop without discuss now.\nSeat me order eight condition society. Knowledge economic thought to." } }, { "model": "library_management.book", "pk": 56, "fields": { "name": "Company serve true professor.", "author": 12, "published_date": "2010-11-08", "isbn": "978-1-7343198-9-7", "summary": "System turn if visit. Early former perhaps trouble. Affect better raise leave movement.\nReality care box enjoy feeling fall reflect. Crime as national after." } }, { "model": "library_management.book", "pk": 57, "fields": { "name": "Suffer Democrat both whatever.", "author": 58, "published_date": "2016-07-22", "isbn": "978-0-04-541044-6", "summary": "Alone manage catch important concern. State save a would thought management.\nDifferent item plan speech remain leave attorney. Answer and memory party strategy. Seat wait sing." } }, { "model": "library_management.book", "pk": 58, "fields": { "name": "Test always piece.", "author": 10, "published_date": "1997-03-09", "isbn": "978-1-64901-544-0", "summary": "Magazine artist argue later color director them. Central must candidate agreement. Fall item particular seem hear.\nMeasure but nor research. Bank hit so." } }, { "model": "library_management.book", "pk": 59, "fields": { "name": "Building hospital eight how out.", "author": 13, "published_date": "1973-08-05", "isbn": "978-1-4318-9196-2", "summary": "Quality doctor range might while whether rich.\nCharge realize until back treat. Close lot catch away street investment. Cost half main explain Mr family including." } }, { "model": "library_management.book", "pk": 60, "fields": { "name": "Maintain personal occur strong.", "author": 64, "published_date": "2000-10-23", "isbn": "978-0-85659-440-3", "summary": "Coach at police. Save cover southern.\nPopular source east several report follow. Value rule nor beautiful.\nTrue ability live approach lay mother. Doctor cultural born city movement drop itself." } }, { "model": "library_management.book", "pk": 61, "fields": { "name": "Hear edge two hair play.", "author": 60, "published_date": "2013-01-08", "isbn": "978-1-934144-81-7", "summary": "Morning attack authority my.\nInternational force community customer about. Past right between difference bar. Movie great building miss public father. Provide knowledge easy type." } }, { "model": "library_management.book", "pk": 62, "fields": { "name": "Media meet full crime reason.", "author": 56, "published_date": "2007-03-01", "isbn": "978-1-4233-1239-0", "summary": "Wife song hand actually remain assume. Decide edge happy study.\nSince film drug above. Society school face act. Pattern find side set performance him church else." } }, { "model": "library_management.book", "pk": 63, "fields": { "name": "Throughout miss TV serve.", "author": 13, "published_date": "2016-09-22", "isbn": "978-1-77198-388-4", "summary": "Industry teacher fire difference fill baby. Onto window include account town shake southern easy. Senior affect six store certain trade." } }, { "model": "library_management.book", "pk": 64, "fields": { "name": "Few company why.", "author": 62, "published_date": "2012-06-18", "isbn": "978-1-199-32701-7", "summary": "In financial more perform before yet. Somebody nor pretty officer forward cause. Become center buy raise.\nBill song increase movement account. Phone control claim pick any player together southern." } }, { "model": "library_management.book", "pk": 65, "fields": { "name": "Policy before.", "author": 5, "published_date": "1975-10-25", "isbn": "978-0-13-129058-7", "summary": "Charge represent bad morning. Until side carry star blue walk.\nStatement system name administration deep head. Reality rock believe realize company range. Strong give blue boy certainly send face." } }, { "model": "library_management.book", "pk": 66, "fields": { "name": "Crime close issue myself.", "author": 10, "published_date": "1973-03-02", "isbn": "978-0-08-255894-1", "summary": "Safe everybody walk them require American put. Stuff later personal either ready I.\nNature impact not a line his away. Firm security able leave. Create believe ability age reason." } }, { "model": "library_management.book", "pk": 67, "fields": { "name": "Stop more red board enter.", "author": 16, "published_date": "2001-02-27", "isbn": "978-0-200-27044-1", "summary": "Tell possible after outside put. Cost TV project eye rather beautiful price. Kitchen set training any forget clearly goal." } }, { "model": "library_management.book", "pk": 68, "fields": { "name": "Center area say class.", "author": 15, "published_date": "1970-01-22", "isbn": "978-1-78925-087-9", "summary": "Follow nature spend last little. Another skin plant worker kid attorney network suddenly. The enter important take." } }, { "model": "library_management.book", "pk": 69, "fields": { "name": "But now range best more.", "author": 65, "published_date": "1987-07-22", "isbn": "978-0-315-67721-0", "summary": "Country relate common price. Only above bed food who however. Morning very network teach along station." } }, { "model": "library_management.book", "pk": 70, "fields": { "name": "Fund car.", "author": 58, "published_date": "2001-07-09", "isbn": "978-0-417-28120-9", "summary": "Beat return scientist wrong already. Physical seat keep sign claim deal. Tough note politics food part challenge." } }, { "model": "library_management.book", "pk": 71, "fields": { "name": "Skill night TV.", "author": 49, "published_date": "1977-06-29", "isbn": "978-1-68326-536-8", "summary": "State city thought hit bring group opportunity language. Less enjoy catch simply. The hit trip.\nReal economy however life. Knowledge can kid can future need. Never hit according over bag." } }, { "model": "library_management.book", "pk": 72, "fields": { "name": "Let subject tell contain.", "author": 72, "published_date": "1982-10-03", "isbn": "978-1-77091-042-3", "summary": "Development idea anyone chance. Off off above now letter.\nBring example then season. Data bar face gas key. Nation manager author end there answer." } }, { "model": "library_management.book", "pk": 73, "fields": { "name": "Including unit reduce new large.", "author": 64, "published_date": "1995-03-26", "isbn": "978-1-4087-9477-7", "summary": "Go race people worry adult. Exactly job traditional amount. Early then media.\nEnergy analysis shake reduce fill conference almost. Way local wish." } }, { "model": "library_management.book", "pk": 74, "fields": { "name": "Ask beat among different.", "author": 3, "published_date": "1985-05-20", "isbn": "978-1-00-595919-7", "summary": "Policy purpose nice suggest pattern. Onto agree indicate.\nTwo shoulder thus benefit sure many such. Rather ask resource success value." } }, { "model": "library_management.book", "pk": 75, "fields": { "name": "Other by four health.", "author": 73, "published_date": "1982-04-17", "isbn": "978-1-72784-841-0", "summary": "Around official live these pressure. Of close data.\nCongress former listen particularly hope case wife. Station choice my off.\nGet old debate. May build soldier. Big every institution." } }, { "model": "library_management.book", "pk": 76, "fields": { "name": "Million already adult.", "author": 45, "published_date": "1975-12-16", "isbn": "978-0-631-09664-1", "summary": "Next tree town very fill. Remain type too senior.\nHeavy financial find specific clearly. Necessary our treat together meet. Direction kind compare network not speak." } }, { "model": "library_management.book", "pk": 77, "fields": { "name": "Ask base more.", "author": 11, "published_date": "2011-01-14", "isbn": "978-1-4083-7380-4", "summary": "Expert growth bring once federal table single.\nTruth field true. Little behind soldier office military agreement." } }, { "model": "library_management.book", "pk": 78, "fields": { "name": "Will your source.", "author": 41, "published_date": "1976-01-27", "isbn": "978-1-945130-61-8", "summary": "Head thing everyone main others the. Fine Congress together camera movie.\nTask activity listen represent law. Budget Congress every go this. May nearly bill late." } }, { "model": "library_management.book", "pk": 79, "fields": { "name": "Specific more garden yes.", "author": 54, "published_date": "1979-11-23", "isbn": "978-1-81631-248-8", "summary": "Expect challenge light common modern court mind. Your peace hit hold.\nHappy relationship card every meeting make free hot. Idea almost push dark else day." } }, { "model": "library_management.book", "pk": 80, "fields": { "name": "Month exist energy house consumer.", "author": 22, "published_date": "1974-03-26", "isbn": "978-0-04-211278-7", "summary": "Line appear read show growth worry cause. Type glass man force sure. General high six south learn college usually.\nNatural thank do deep word. Its individual see natural enjoy new my." } }, { "model": "library_management.book", "pk": 81, "fields": { "name": "Camera speak himself.", "author": 50, "published_date": "1990-06-03", "isbn": "978-0-12-266459-5", "summary": "Huge behind save street child fight. Cut reduce lead memory respond despite. Foreign expert attack six treatment safe." } }, { "model": "library_management.book", "pk": 82, "fields": { "name": "Consider operation smile.", "author": 64, "published_date": "1975-04-18", "isbn": "978-1-5103-6915-3", "summary": "Brother buy later. Along class director member. Look seven law by office military first.\nIts media population south answer. Business writer easy light. Imagine fine generation several." } }, { "model": "library_management.book", "pk": 83, "fields": { "name": "Give wind consumer.", "author": 74, "published_date": "1975-11-06", "isbn": "978-1-00-710663-6", "summary": "However in he option work.\nHotel fill late model. Start current now about guess really.\nAbility note car expert before. Agree wear attack within report idea sit." } }, { "model": "library_management.book", "pk": 84, "fields": { "name": "Consumer stand page area.", "author": 55, "published_date": "2001-03-26", "isbn": "978-0-674-85881-7", "summary": "Who worry because letter wide. City sound a glass art goal lead.\nTerm particularly ahead media lay short miss. Data suggest effect hear ok rock. Parent network my." } }, { "model": "library_management.book", "pk": 85, "fields": { "name": "Cover rest just.", "author": 13, "published_date": "2021-06-04", "isbn": "978-1-9994474-8-9", "summary": "View certainly better he subject size. Short within more when. Decision protect government need center station just." } }, { "model": "library_management.book", "pk": 86, "fields": { "name": "Politics rock.", "author": 25, "published_date": "1975-11-07", "isbn": "978-0-209-57892-0", "summary": "When study remember performance bit last church. Free likely minute nearly recent source sometimes. Bed much top TV. Blue city role.\nScene no hair role." } }, { "model": "library_management.book", "pk": 87, "fields": { "name": "Only wrong discussion.", "author": 30, "published_date": "1980-07-05", "isbn": "978-1-909990-89-0", "summary": "At at color head interview star.\r\nDifferent mission Mr believe. Detail become kid night do. Yet staff benefit ok city back." } }, { "model": "library_management.book", "pk": 88, "fields": { "name": "Tax these article.", "author": 13, "published_date": "2003-07-31", "isbn": "978-1-09-484986-7", "summary": "Top store similar everything figure although. Within skill wrong without whole society. Ball company people nature defense discover American. Forward movement everything mouth pass off garden enjoy." } }, { "model": "library_management.book", "pk": 89, "fields": { "name": "Improve single side really foreign.", "author": 64, "published_date": "1996-11-24", "isbn": "978-0-7958-9295-0", "summary": "Sister if leave floor despite head. Write choose Mrs produce hot decide.\nGame stage quality decision. Cell animal voice drug approach style." } }, { "model": "library_management.book", "pk": 90, "fields": { "name": "Believe our.", "author": 56, "published_date": "1974-08-22", "isbn": "978-0-02-659686-2", "summary": "Only of Congress pattern smile. Gun recently dark usually. Social all little art.\nLine school view likely.\nI north he. Walk himself respond test." } }, { "model": "library_management.book", "pk": 91, "fields": { "name": "If letter community police.", "author": 13, "published_date": "2009-12-06", "isbn": "978-0-313-77078-4", "summary": "Soldier meet where avoid. Never middle partner technology.\nSafe TV place since next foot. Area when create voice way we effect." } }, { "model": "library_management.book", "pk": 92, "fields": { "name": "Develop energy brother.", "author": 56, "published_date": "1977-11-08", "isbn": "978-0-460-15068-2", "summary": "Student store book much outside agree involve capital. Agent soldier often young. Star table claim organization per." } }, { "model": "library_management.book", "pk": 93, "fields": { "name": "Gun dinner organization.", "author": 57, "published_date": "1974-11-20", "isbn": "978-1-878176-44-8", "summary": "Door maintain cover property western. Big act according.\nUnderstand month behavior remember theory memory. Finish wide front even ever approach today." } }, { "model": "library_management.book", "pk": 94, "fields": { "name": "Knowledge on must idea face.", "author": 68, "published_date": "1987-08-14", "isbn": "978-1-346-56028-1", "summary": "Child what eight color shake body generation. Southern wait training public cause PM that onto. Fund network away good pattern media." } }, { "model": "library_management.book", "pk": 95, "fields": { "name": "Yourself against even.", "author": 7, "published_date": "2014-06-23", "isbn": "978-0-427-71012-6", "summary": "Party window discussion site church week development. Occur section media account election degree. Discuss new part open." } }, { "model": "library_management.book", "pk": 96, "fields": { "name": "Arm other spend.", "author": 17, "published_date": "1978-09-15", "isbn": "978-0-8429-8541-3", "summary": "Business specific something international point place tell expert. Player life character rate forget. Store produce learn." } }, { "model": "library_management.book", "pk": 97, "fields": { "name": "Measure agent show beat.", "author": 20, "published_date": "1972-08-03", "isbn": "978-0-539-51975-4", "summary": "Take industry kind level season see. Board behind pass throw president senior thought. Sell cell appear material discuss scientist. Four population his over rule." } }, { "model": "library_management.book", "pk": 98, "fields": { "name": "Sing start whom.", "author": 60, "published_date": "1997-02-02", "isbn": "978-0-00-301525-6", "summary": "Increase benefit cup ever grow morning test. Specific commercial sport Republican. Level because begin only protect.\nPolitical cause line cup difficult every approach. Plant approach for magazine." } }, { "model": "library_management.book", "pk": 99, "fields": { "name": "Common choice section strong.", "author": 27, "published_date": "1999-01-11", "isbn": "978-0-7813-5784-5", "summary": "Increase big figure check establish moment.\nColor future bar usually phone heavy hear. Seat line the camera personal leader among.\nPaper even brother although store. Go white feel who." } }, { "model": "library_management.book", "pk": 100, "fields": { "name": "Research hospital evening.", "author": 5, "published_date": "1983-12-22", "isbn": "978-0-227-85818-9", "summary": "Rise street front. Structure heavy dream mission part enter.\nPerformance opportunity option. Prevent summer east may red camera. Station money least property free piece far." } }, { "model": "library_management.book", "pk": 101, "fields": { "name": "Happy character born.", "author": 62, "published_date": "2009-04-21", "isbn": "978-1-198-32065-1", "summary": "Road learn minute fire case on camera. As world little race protect something design make. Make where glass happy look." } }, { "model": "library_management.book", "pk": 102, "fields": { "name": "Teach whose tree.", "author": 19, "published_date": "1984-05-06", "isbn": "978-0-7618-0205-1", "summary": "Produce court brother woman huge study morning. Consider science federal not. West ability whom early loss involve beat everything." } }, { "model": "library_management.book", "pk": 103, "fields": { "name": "Its break several conference.", "author": 56, "published_date": "2024-03-25", "isbn": "978-1-301-64941-9", "summary": "Nearly crime positive TV. Republican prepare lose dark foreign feel sure. In various boy nice though father. Always teacher test write trade decision not." } }, { "model": "library_management.book", "pk": 104, "fields": { "name": "Land travel he thus.", "author": 46, "published_date": "2012-06-24", "isbn": "978-0-19-033130-6", "summary": "Step memory memory clear. Republican building area cell vote hope.\nAble various democratic. Security television around change yet.\nWoman under edge bit town two eight." } }, { "model": "library_management.book", "pk": 105, "fields": { "name": "Wind respond through lose.", "author": 62, "published_date": "2006-11-09", "isbn": "978-1-02-530924-8", "summary": "Among book them mind conference grow. Two plant factor set space nor." } }, { "model": "library_management.book", "pk": 106, "fields": { "name": "Fish plant two.", "author": 5, "published_date": "2016-01-17", "isbn": "978-0-200-72139-4", "summary": "Do magazine behavior drug test dark true. Name day beautiful see Democrat." } }, { "model": "library_management.book", "pk": 107, "fields": { "name": "Family treat brother.", "author": 3, "published_date": "1971-10-25", "isbn": "978-1-277-83245-7", "summary": "Prove student language. Power bad forget heavy care mission course. Southern cold write glass. Evening available religious always cultural television." } }, { "model": "library_management.book", "pk": 108, "fields": { "name": "Go bad may thus.", "author": 32, "published_date": "2018-06-22", "isbn": "978-1-902967-12-7", "summary": "News poor option choose. Minute at material stay foreign look.\nMust fear want. City whose address name industry. Fast compare sea worker measure at probably." } }, { "model": "library_management.book", "pk": 109, "fields": { "name": "Act study he officer other.", "author": 55, "published_date": "1978-01-16", "isbn": "978-0-85169-871-7", "summary": "Million and side ability job myself goal. Product affect put him throughout learn next physical.\nRemain fact over box. Concern specific opportunity gun exactly section." } }, { "model": "library_management.book", "pk": 110, "fields": { "name": "State institution sell.", "author": 51, "published_date": "2007-05-13", "isbn": "978-1-971384-48-1", "summary": "Mother indicate lawyer least throughout research describe ball. Benefit none ready raise risk. Start because far hair what.\nCollection stage those set western hear. Tend loss somebody behind laugh." } }, { "model": "library_management.book", "pk": 111, "fields": { "name": "Property night data for.", "author": 54, "published_date": "2001-01-27", "isbn": "978-0-410-61369-4", "summary": "Stand fund hair former. Enter hour scene impact just church check paper. Green necessary particularly no require if coach.\nPresent present trouble light. Small ready live dog stuff." } }, { "model": "library_management.book", "pk": 112, "fields": { "name": "Maintain enough unit sometimes environment.", "author": 7, "published_date": "2019-07-26", "isbn": "978-0-653-66956-4", "summary": "Year human situation method imagine that hit so. Couple south begin especially who table. Purpose less it interview dark threat officer." } }, { "model": "library_management.book", "pk": 113, "fields": { "name": "It recent dark nation.", "author": 68, "published_date": "2015-01-03", "isbn": "978-0-211-96329-5", "summary": "Treatment eye three sit material. Note why good gun test protect. High game executive yourself send site computer." } }, { "model": "library_management.book", "pk": 114, "fields": { "name": "List south animal stand section.", "author": 22, "published_date": "1993-02-25", "isbn": "978-1-62102-989-2", "summary": "Full note lose police ability know. Scene order build still style wind. Information improve area.\nWide reason support can city. Turn moment continue stage do tend peace by." } }, { "model": "library_management.book", "pk": 115, "fields": { "name": "Audience cause.", "author": 49, "published_date": "2000-08-25", "isbn": "978-0-445-58853-0", "summary": "Student meeting environmental feeling campaign. Doctor model which.\nProtect ahead speech. Standard teacher process against series federal." } }, { "model": "library_management.book", "pk": 116, "fields": { "name": "Meet suddenly run miss.", "author": 38, "published_date": "1987-12-06", "isbn": "978-1-348-63284-9", "summary": "Similar draw while. Doctor year economy give wrong common. This media continue toward not house.\nExecutive security civil. Ready wind hotel real." } }, { "model": "library_management.book", "pk": 117, "fields": { "name": "Expect simply.", "author": 56, "published_date": "2009-07-21", "isbn": "978-1-934675-98-4", "summary": "Home some alone those. Four actually major clear similar put.\nCover over system lot book dog. Though remember drive increase." } }, { "model": "library_management.book", "pk": 118, "fields": { "name": "Say officer oil everybody beyond.", "author": 67, "published_date": "1976-04-17", "isbn": "978-0-7650-1097-1", "summary": "Despite near study development morning yard himself opportunity. Adult future social affect explain such.\nMedical new church hour shake. Tree talk president pressure spring evidence." } }, { "model": "library_management.book", "pk": 119, "fields": { "name": "Single pass perhaps.", "author": 17, "published_date": "1999-05-06", "isbn": "978-0-603-02229-6", "summary": "Mouth field commercial indicate bed suffer.\nSeven painting throughout theory interview child. Trial executive poor theory question mention.\nReally safe participant indicate." } }, { "model": "library_management.book", "pk": 120, "fields": { "name": "Long reveal create.", "author": 31, "published_date": "1972-03-14", "isbn": "978-1-299-76303-6", "summary": "Senior main successful public former network whatever. These send special hot.\nFoot beautiful expect interest smile young protect. Suddenly their turn sister chair." } }, { "model": "library_management.book", "pk": 121, "fields": { "name": "Important all left capital.", "author": 13, "published_date": "2024-05-02", "isbn": "978-0-937910-00-9", "summary": "Very protect daughter leader small responsibility. Little ago matter operation line kitchen lot." } }, { "model": "library_management.book", "pk": 122, "fields": { "name": "Among example in.", "author": 1, "published_date": "2012-07-01", "isbn": "978-1-85151-583-7", "summary": "Center end accept usually. Just population measure reason think.\nBox despite set point customer current design. Nature treatment fast fill significant. Special look feel make hundred shake." } }, { "model": "library_management.book", "pk": 123, "fields": { "name": "Go research nor owner.", "author": 22, "published_date": "1995-08-22", "isbn": "978-0-692-94274-1", "summary": "Including out forget might. Less prove point carry record they. Practice attorney trip election team east above.\nTop bad figure. Interesting win when decade physical response." } }, { "model": "library_management.book", "pk": 124, "fields": { "name": "Pressure green simple each.", "author": 23, "published_date": "2015-06-20", "isbn": "978-1-170-62762-4", "summary": "Truth knowledge building reach director. Need amount run girl. Baby seat indicate man want politics last middle." } }, { "model": "library_management.book", "pk": 125, "fields": { "name": "Later return development word.", "author": 27, "published_date": "2004-09-13", "isbn": "978-0-04-399981-3", "summary": "Before source newspaper consumer mind clearly option. Establish floor decade daughter customer Mr. Effect report whole sign from space country." } }, { "model": "library_management.book", "pk": 126, "fields": { "name": "Speak expert within knowledge.", "author": 28, "published_date": "2024-05-10", "isbn": "978-1-4695-3797-9", "summary": "Per city establish media. Their game history sort lawyer. Answer key add ability fact.\nSmall yeah old crime news. Human rock future four letter why or. Election coach increase teach." } }, { "model": "library_management.book", "pk": 127, "fields": { "name": "Event national high old trouble.", "author": 65, "published_date": "1990-07-05", "isbn": "978-0-87131-562-5", "summary": "Trade save their teacher. Provide capital pull group fly provide.\nNow test physical thank international. Machine wife shake about charge other thing. Be purpose policy big couple add international." } }, { "model": "library_management.book", "pk": 128, "fields": { "name": "Spend discuss scene few.", "author": 68, "published_date": "2016-12-09", "isbn": "978-1-322-29476-6", "summary": "Growth director once think me station between. Share great standard animal big director yes. Tell there really another part eye ahead." } }, { "model": "library_management.book", "pk": 129, "fields": { "name": "Middle television seem drive.", "author": 1, "published_date": "1976-02-05", "isbn": "978-1-880303-39-9", "summary": "Form mission ready a difference amount. Million recently upon conference theory course. Increase sometimes six hotel when. Maybe mention result manage once this painting tell." } }, { "model": "library_management.book", "pk": 130, "fields": { "name": "Agreement address actually strategy.", "author": 5, "published_date": "1986-02-23", "isbn": "978-0-16-281880-4", "summary": "Research degree keep second meeting drop under. Those space available while we visit challenge." } }, { "model": "library_management.book", "pk": 131, "fields": { "name": "Piece billion establish improve.", "author": 54, "published_date": "1971-09-06", "isbn": "978-1-00-251101-5", "summary": "Follow middle condition goal simple last. Fire key possible pass range no.\nVote meeting cost assume especially so operation interview." } }, { "model": "library_management.book", "pk": 132, "fields": { "name": "Owner small specific.", "author": 72, "published_date": "2012-08-30", "isbn": "978-0-13-875902-5", "summary": "Look realize large building surface necessary up. Game western authority box wish too. Thousand environment send important agency company must Mrs. Back leg deal significant." } }, { "model": "library_management.book", "pk": 133, "fields": { "name": "Single baby within seven.", "author": 6, "published_date": "1986-11-03", "isbn": "978-0-01-413849-4", "summary": "Degree action without computer against to smile." } }, { "model": "library_management.book", "pk": 134, "fields": { "name": "Also place turn.", "author": 37, "published_date": "2005-01-28", "isbn": "978-0-460-10884-3", "summary": "Join room huge loss may. Pretty wide avoid continue positive certain pay.\nBall cell form really teacher. All instead song live level difference protect." } }, { "model": "library_management.book", "pk": 135, "fields": { "name": "Model more able weight run.", "author": 69, "published_date": "1989-02-13", "isbn": "978-1-74039-567-0", "summary": "Car wrong himself body. Budget theory build else. They that every degree live put town." } }, { "model": "library_management.book", "pk": 136, "fields": { "name": "Service glass.", "author": 49, "published_date": "1996-08-28", "isbn": "978-1-282-52418-7", "summary": "Value big color direction speech alone. Better ever certainly democratic. After personal sit whether. Budget want attention new wife." } }, { "model": "library_management.book", "pk": 137, "fields": { "name": "Official seat interesting partner.", "author": 62, "published_date": "1999-08-19", "isbn": "978-0-7682-9953-3", "summary": "Public here after total seem floor peace. Performance whom member plant he sort anyone week. Minute cut oil his trouble major significant. Unit media message never according." } }, { "model": "library_management.book", "pk": 138, "fields": { "name": "Machine hit last federal.", "author": 28, "published_date": "1995-10-11", "isbn": "978-1-299-24276-0", "summary": "Quite simple fine current whatever organization. Hit security last throughout could evidence. Wonder return town improve law very." } }, { "model": "library_management.book", "pk": 139, "fields": { "name": "Impact science.", "author": 73, "published_date": "2021-12-30", "isbn": "978-1-71563-624-1", "summary": "Support too nor receive quickly. Provide century community drop physical technology effort.\nAlso begin discussion remember magazine unit start score. Pay almost bit do." } }, { "model": "library_management.book", "pk": 140, "fields": { "name": "Able church letter.", "author": 39, "published_date": "1976-11-29", "isbn": "978-1-5135-9284-8", "summary": "Wait yeah law. Involve specific challenge home account trade decide. Wide power Mrs debate off suffer worker." } }, { "model": "library_management.book", "pk": 141, "fields": { "name": "Buy capital professional.", "author": 59, "published_date": "2017-07-10", "isbn": "978-0-07-011063-2", "summary": "Know heart tree agent learn. Small give represent bring great low point.\nLose science to clearly phone dinner. Campaign technology oil order policy pull pay." } }, { "model": "library_management.book", "pk": 142, "fields": { "name": "Particular wait just side.", "author": 1, "published_date": "2022-08-27", "isbn": "978-0-334-71647-1", "summary": "Season theory cost reflect. Entire different community international claim of home language. Center name they same." } }, { "model": "library_management.book", "pk": 143, "fields": { "name": "Return family leader.", "author": 24, "published_date": "1997-08-01", "isbn": "978-1-79180-101-4", "summary": "Avoid build present agent. Without page check myself learn interest bed. Personal role son.\nReveal work whole final. Sell produce share environment." } }, { "model": "library_management.book", "pk": 144, "fields": { "name": "Age current minute.", "author": 42, "published_date": "2018-06-16", "isbn": "978-1-4194-2240-9", "summary": "Tend about program third adult ball business. Everybody memory Congress spring. Indeed challenge site expert project live." } }, { "model": "library_management.book", "pk": 145, "fields": { "name": "Important model onto bill.", "author": 49, "published_date": "2011-05-10", "isbn": "978-1-67244-226-8", "summary": "Particular now see senior event tree than night. Actually floor reflect join experience not trouble. If police half western beat note think security." } }, { "model": "library_management.book", "pk": 146, "fields": { "name": "So would.", "author": 38, "published_date": "1971-12-25", "isbn": "978-0-13-300206-5", "summary": "Expect small return history. Impact wear star trip meeting work.\nNothing issue oil between find movie wife. Lawyer easy pick cover decide. Hotel community task marriage forget buy should too." } }, { "model": "library_management.book", "pk": 147, "fields": { "name": "Different amount serious.", "author": 40, "published_date": "1982-09-09", "isbn": "978-0-685-49894-1", "summary": "Yeah sure north call street might attorney scientist. Look budget very government though.\nHe senior easy do leave long follow. Almost explain soon whole recognize admit career community." } }, { "model": "library_management.book", "pk": 148, "fields": { "name": "Impact establish such region then.", "author": 40, "published_date": "2005-01-17", "isbn": "978-0-373-50893-8", "summary": "Leave thus lot check here nation continue. Admit home task energy democratic career.\nOut behavior own experience. Talk hour ahead manager begin view across down. Tv call player feel." } }, { "model": "library_management.book", "pk": 149, "fields": { "name": "Include person seven.", "author": 1, "published_date": "2005-08-08", "isbn": "978-0-483-35290-2", "summary": "Leave hope light behavior trial answer grow change. Smile easy whether." } }, { "model": "library_management.book", "pk": 150, "fields": { "name": "Into edge will.", "author": 50, "published_date": "2016-02-22", "isbn": "978-1-57863-425-5", "summary": "Reach individual can step bring. Marriage finish chance contain.\nCondition responsibility exist respond dinner. Standard institution ago property age her organization." } }, { "model": "library_management.book", "pk": 151, "fields": { "name": "Few character program throw.", "author": 63, "published_date": "2006-01-06", "isbn": "978-0-548-29426-0", "summary": "Like single after couple quite matter how. Attorney decision short everyone food notice president. Doctor since interest seem." } }, { "model": "library_management.book", "pk": 152, "fields": { "name": "Will political.", "author": 75, "published_date": "1990-01-14", "isbn": "978-1-5287-0468-7", "summary": "Front statement back challenge particular network. Line fear show threat relate speak hand away. Soon that boy fact.\nNote next sell stand. Kid must sound whole radio hand window either." } }, { "model": "library_management.book", "pk": 153, "fields": { "name": "As receive class second same.", "author": 1, "published_date": "1987-06-12", "isbn": "978-0-480-14433-3", "summary": "Politics land consumer window effort. Option themselves program card lawyer. Sell however lawyer eye maintain billion. Gas hold network particularly under recent." } }, { "model": "library_management.book", "pk": 154, "fields": { "name": "At human chance brother.", "author": 22, "published_date": "1992-07-09", "isbn": "978-0-03-098783-0", "summary": "Economic talk age necessary low age blue vote. Then clearly executive stock ability too those. Wish up rise she yard better company." } }, { "model": "library_management.book", "pk": 155, "fields": { "name": "Machine third produce.", "author": 57, "published_date": "2017-09-14", "isbn": "978-1-56136-597-5", "summary": "Fear build partner together. Bill over TV but against relationship. Research economy general strong with.\nTake interview form season claim blue begin. During yes professor society." } }, { "model": "library_management.book", "pk": 156, "fields": { "name": "Key course meet.", "author": 42, "published_date": "1997-08-10", "isbn": "978-1-05-329568-1", "summary": "Their somebody heavy often personal technology the. Significant war seem. Remain soon visit great lead glass." } }, { "model": "library_management.book", "pk": 157, "fields": { "name": "What class product.", "author": 52, "published_date": "1975-10-08", "isbn": "978-0-590-01851-7", "summary": "Field forget once book nor place door. Upon foreign trial international behavior. Hope step card mouth.\nPer language whatever paper happy. Race politics television tell suddenly." } }, { "model": "library_management.book", "pk": 158, "fields": { "name": "Process most.", "author": 30, "published_date": "1979-08-31", "isbn": "978-1-05-510525-4", "summary": "Music state him hotel although political although technology. Along guy speak easy through your recent.\nEverything Mrs most scientist than for road responsibility." } }, { "model": "library_management.book", "pk": 159, "fields": { "name": "Address process whole.", "author": 38, "published_date": "2004-04-01", "isbn": "978-0-14-701270-8", "summary": "Politics give cost remember reduce visit success. Own decide clear. Tree almost beat health somebody maintain." } }, { "model": "library_management.book", "pk": 160, "fields": { "name": "Role cost bag exist.", "author": 8, "published_date": "1998-04-25", "isbn": "978-1-964274-13-3", "summary": "Technology performance world affect. Consider seven control different. Free sure source keep subject. Degree police during lawyer live past future." } }, { "model": "library_management.book", "pk": 161, "fields": { "name": "Board ability mention dinner city.", "author": 35, "published_date": "1970-08-30", "isbn": "978-0-400-87882-9", "summary": "Song rock apply night simply point page story.\nPaper head go minute imagine. Public remember write condition." } }, { "model": "library_management.book", "pk": 162, "fields": { "name": "End even opportunity.", "author": 72, "published_date": "2008-12-02", "isbn": "978-1-67016-718-7", "summary": "Now near assume every single prepare traditional red. Individual have not million. Democratic table able read second above its doctor." } }, { "model": "library_management.book", "pk": 163, "fields": { "name": "Future situation believe rather former.", "author": 35, "published_date": "1990-08-28", "isbn": "978-0-658-39662-5", "summary": "About quality simply foreign what. She relate raise son quite sense skin read. Leg accept either hit onto apply. Season front per away thing house." } }, { "model": "library_management.book", "pk": 164, "fields": { "name": "Hear learn.", "author": 63, "published_date": "1979-02-09", "isbn": "978-0-04-760965-7", "summary": "Success audience onto black yes. Think baby speak thousand save. Clear mention clear father.\nScore ground position threat figure political. City issue like how design area war leader." } }, { "model": "library_management.book", "pk": 165, "fields": { "name": "Imagine those behavior.", "author": 25, "published_date": "2008-05-25", "isbn": "978-0-945804-33-8", "summary": "Gun town rich big meet success north well. Game professional various good win his.\r\nDrop simple cut report all there." } }, { "model": "library_management.book", "pk": 166, "fields": { "name": "Group laugh pressure magazine site.", "author": 44, "published_date": "2013-04-23", "isbn": "978-0-242-42985-2", "summary": "Condition bring almost. Others however catch artist ready.\nWeek evidence early strategy she item. Suggest smile them pressure. Onto something list current affect son trial." } }, { "model": "library_management.book", "pk": 167, "fields": { "name": "Power if quality.", "author": 44, "published_date": "2001-08-21", "isbn": "978-0-9983221-4-8", "summary": "Including more far often leg. Fish everybody consider want. Issue whose between who through.\nChange free eye sport his. Service also reality education.\nWestern article happy reality." } }, { "model": "library_management.book", "pk": 168, "fields": { "name": "Both decide Mr available nor.", "author": 45, "published_date": "1970-08-25", "isbn": "978-0-912764-23-8", "summary": "Writer deal add article member heavy body.\nThus without whole claim nearly how street. Western yet keep leader.\nBig huge price. Kitchen car group within local simple form. Rock form far begin." } }, { "model": "library_management.book", "pk": 169, "fields": { "name": "Per research week.", "author": 48, "published_date": "1996-10-05", "isbn": "978-1-191-59160-7", "summary": "Task once others tonight born land stay. From shoulder woman less month.\nReally body head time cut argue above rock. Onto should seven officer score far successful task. Official morning key." } }, { "model": "library_management.book", "pk": 170, "fields": { "name": "One generation bank.", "author": 32, "published_date": "1986-06-03", "isbn": "978-1-08-525405-2", "summary": "Push claim professional admit image my level. Husband station will word list." } }, { "model": "library_management.book", "pk": 171, "fields": { "name": "Everybody inside artist beyond.", "author": 14, "published_date": "2006-03-28", "isbn": "978-0-7987-7310-2", "summary": "You paper the significant chance college. Her consumer public month rock pull without. This soldier rock agree group agency risk." } }, { "model": "library_management.book", "pk": 172, "fields": { "name": "Four practice nor if coach.", "author": 21, "published_date": "1984-09-23", "isbn": "978-1-153-87076-4", "summary": "Safe building show show research state. Board shoulder artist ask woman defense position.\nUpon light glass political choose technology process. Power class artist how either usually." } }, { "model": "library_management.book", "pk": 173, "fields": { "name": "Meet tend fire short cold.", "author": 37, "published_date": "2013-03-17", "isbn": "978-0-585-16142-6", "summary": "Four now after majority set since either. Carry hand green rock. Authority choose pretty both training energy." } }, { "model": "library_management.book", "pk": 174, "fields": { "name": "Room rate full news have.", "author": 44, "published_date": "1988-07-04", "isbn": "978-1-897089-81-1", "summary": "Interesting realize collection piece network modern concern. Mission allow significant reason.\nGeneration even live rest car wind edge. Such center minute dog." } }, { "model": "library_management.book", "pk": 175, "fields": { "name": "Reality group.", "author": 39, "published_date": "2008-04-09", "isbn": "978-0-399-32169-6", "summary": "Success son population.\nDecade onto wide system. Determine official huge fire. Various way marriage certainly. Color mission choose return begin." } }, { "model": "library_management.book", "pk": 176, "fields": { "name": "Democratic receive unit theory role.", "author": 33, "published_date": "2019-02-12", "isbn": "978-1-56341-991-1", "summary": "Paper Mr goal paper various. Indicate different green seem.\nWear evidence same phone. Big who education everything for worker alone. Forward area environmental spring either upon." } }, { "model": "library_management.book", "pk": 177, "fields": { "name": "Speech trouble.", "author": 65, "published_date": "1992-03-24", "isbn": "978-0-7209-8524-5", "summary": "Statement author such rich course science. Me throughout his. Already two serve real break protect fill.\nEvidence suddenly the argue. Almost account model now set agree." } }, { "model": "library_management.book", "pk": 178, "fields": { "name": "Institution guess true.", "author": 51, "published_date": "1977-02-25", "isbn": "978-0-8032-5767-2", "summary": "Although wish her minute clear offer ago than. Teacher cold practice rest none. Exist watch and partner about." } }, { "model": "library_management.book", "pk": 179, "fields": { "name": "Receive along.", "author": 33, "published_date": "1973-03-01", "isbn": "978-1-67318-940-7", "summary": "They here according claim. Over west baby industry.\nBuild soldier least arm tell contain. From season national energy. Mr point risk training alone assume play." } }, { "model": "library_management.book", "pk": 180, "fields": { "name": "Practice staff establish final.", "author": 32, "published_date": "2006-08-04", "isbn": "978-1-391-27510-9", "summary": "Whose gas foreign end question as news. They painting low store read admit change song. Wrong conference up support." } }, { "model": "library_management.book", "pk": 181, "fields": { "name": "Sea toward by so interesting.", "author": 54, "published_date": "2012-09-15", "isbn": "978-0-452-77503-9", "summary": "Court card make. Standard case least each add get clearly.\nPhone think line never spend. Husband dream environmental two body. Area single general home card." } }, { "model": "library_management.book", "pk": 182, "fields": { "name": "Happen describe while itself.", "author": 36, "published_date": "1990-01-29", "isbn": "978-0-336-57807-7", "summary": "Effect control phone remember. Word use carry generation.\nImportant anyone cell this. Public live successful very soon thought. Sense media cultural politics." } }, { "model": "library_management.book", "pk": 183, "fields": { "name": "Open more project.", "author": 65, "published_date": "2006-11-05", "isbn": "978-0-331-62204-1", "summary": "Trade ask phone yes. Enter such attorney scene front do. Ask federal reach baby live other.\nServe along state then. Eye south deep shoulder. Manage western nothing." } }, { "model": "library_management.book", "pk": 184, "fields": { "name": "Traditional take ask.", "author": 9, "published_date": "1982-07-08", "isbn": "978-1-292-99210-5", "summary": "Still share purpose citizen home financial race. Thousand pattern reveal enjoy pull four important.\nMeeting citizen space they. Need color common positive forward. Item where occur spend." } }, { "model": "library_management.book", "pk": 185, "fields": { "name": "Difference production offer type.", "author": 69, "published_date": "1970-03-21", "isbn": "978-1-01-175052-8", "summary": "Wrong interview laugh during. Or prove behavior on perhaps sister allow." } }, { "model": "library_management.book", "pk": 186, "fields": { "name": "Improve strategy floor.", "author": 35, "published_date": "1993-08-03", "isbn": "978-1-5290-6630-2", "summary": "Various imagine guess share.\nCapital imagine budget yeah fill protect machine. Him thank already he. Than final trade foot soon indeed may. Future wrong activity go." } }, { "model": "library_management.book", "pk": 187, "fields": { "name": "Media difference husband weight.", "author": 51, "published_date": "2019-06-22", "isbn": "978-1-83679-868-2", "summary": "Light ball effect until. Change its pattern require try measure theory. Public open manager.\nBox heart to specific. Job wall money more continue." } }, { "model": "library_management.book", "pk": 188, "fields": { "name": "Owner car attack new beyond.", "author": 38, "published_date": "2007-12-01", "isbn": "978-0-624-45923-1", "summary": "Kind three travel think. Reflect recently smile pattern opportunity wish. It age pretty sign watch.\nWall teach option bar Congress. However control race. Debate weight hotel oil down worry land." } }, { "model": "library_management.book", "pk": 189, "fields": { "name": "Vote show rule child.", "author": 19, "published_date": "2014-01-23", "isbn": "978-0-18-599642-8", "summary": "Save low section. Bed true hit thus under professional.\nMeet close to pick matter ready. Pretty argue conference maybe coach baby." } }, { "model": "library_management.book", "pk": 190, "fields": { "name": "Mind picture different.", "author": 21, "published_date": "2014-05-24", "isbn": "978-1-225-74906-6", "summary": "Southern program claim. Weight sometimes case chair community hard responsibility." } }, { "model": "library_management.book", "pk": 191, "fields": { "name": "Trial scene poor worker.", "author": 10, "published_date": "2009-04-03", "isbn": "978-0-423-90037-8", "summary": "Stock spend deal certainly. Ground appear morning about represent best." } }, { "model": "library_management.book", "pk": 192, "fields": { "name": "Still teach.", "author": 1, "published_date": "1987-10-21", "isbn": "978-1-263-63800-1", "summary": "Own amount carry two. Building yet never office.\nEvening pull education his. American personal lay apply consider choice data. Draw none data firm shoulder." } }, { "model": "library_management.book", "pk": 193, "fields": { "name": "Away cut western.", "author": 24, "published_date": "1974-05-06", "isbn": "978-0-7118-7285-1", "summary": "Smile better eat rock. Form heavy outside sell step be.\nMiss team hold traditional. Deep plant most serve summer.\nSummer identify marriage. Next old treat citizen." } }, { "model": "library_management.book", "pk": 194, "fields": { "name": "Understand plan move north.", "author": 51, "published_date": "1971-03-06", "isbn": "978-1-77202-904-8", "summary": "Final TV artist near military. Arm small future Democrat fly consider mention white." } }, { "model": "library_management.book", "pk": 195, "fields": { "name": "World contain.", "author": 31, "published_date": "2019-10-25", "isbn": "978-1-144-05413-5", "summary": "Political try quality more. Event mean exactly use measure. Water skin summer relate.\nAct red respond debate bar room interest. Possible positive country require. So adult keep fight here college." } }, { "model": "library_management.book", "pk": 196, "fields": { "name": "Act computer.", "author": 57, "published_date": "1992-10-12", "isbn": "978-1-5454-0461-4", "summary": "Difference agency scene better. Cold program maintain lot industry skin actually. Case ask past I." } }, { "model": "library_management.book", "pk": 197, "fields": { "name": "Occur fund live exist.", "author": 17, "published_date": "2001-05-02", "isbn": "978-1-138-23738-4", "summary": "Soldier million parent policy measure. Star position dog actually deal economic. Officer contain seem.\nWoman decision often take approach herself model game." } }, { "model": "library_management.book", "pk": 198, "fields": { "name": "Lose candidate measure.", "author": 2, "published_date": "2019-01-28", "isbn": "978-0-343-68236-1", "summary": "Decision evening size language budget reveal pattern. Set every eat not range. Describe threat suggest nation hair never." } }, { "model": "library_management.book", "pk": 199, "fields": { "name": "Age city economic she difficult.", "author": 13, "published_date": "1992-10-18", "isbn": "978-1-115-53216-7", "summary": "Many specific prepare table lawyer budget speak. Audience life either alone everyone hard get hold. Society stop effort it. List tough wonder receive south sister politics." } }, { "model": "library_management.book", "pk": 200, "fields": { "name": "While imagine indicate.", "author": 43, "published_date": "1983-10-08", "isbn": "978-0-558-62394-4", "summary": "Number detail difference. Either sound rise child. Program table oil physical game.\nMe east modern way wish truth able according. Mother other too. Their pull certain give when." } } ] django-taggit-6.1.0/sample_taggit/fixtures/0005_tags.json000066400000000000000000000134741467620475500232540ustar00rootroot00000000000000[ { "model": "taggit.tag", "pk": 1, "fields": { "name": "history", "slug": "history" } }, { "model": "taggit.tag", "pk": 2, "fields": { "name": "fantasy", "slug": "fantasy" } }, { "model": "taggit.tag", "pk": 5, "fields": { "name": "Science Fiction", "slug": "science-fiction" } }, { "model": "taggit.tag", "pk": 6, "fields": { "name": "Historical", "slug": "historical" } }, { "model": "taggit.tag", "pk": 7, "fields": { "name": "Adventure", "slug": "adventure" } }, { "model": "taggit.tag", "pk": 8, "fields": { "name": "Anthology", "slug": "anthology" } }, { "model": "taggit.tag", "pk": 9, "fields": { "name": "Art", "slug": "art" } }, { "model": "taggit.tag", "pk": 10, "fields": { "name": "Autobiography", "slug": "autobiography" } }, { "model": "taggit.tag", "pk": 11, "fields": { "name": "Biography", "slug": "biography" } }, { "model": "taggit.tag", "pk": 12, "fields": { "name": "Children's", "slug": "childrens" } }, { "model": "taggit.tag", "pk": 13, "fields": { "name": "Classic", "slug": "classic" } }, { "model": "taggit.tag", "pk": 14, "fields": { "name": "Comics", "slug": "comics" } }, { "model": "taggit.tag", "pk": 15, "fields": { "name": "Contemporary", "slug": "contemporary" } }, { "model": "taggit.tag", "pk": 16, "fields": { "name": "Cookbooks", "slug": "cookbooks" } }, { "model": "taggit.tag", "pk": 17, "fields": { "name": "Diaries", "slug": "diaries" } }, { "model": "taggit.tag", "pk": 18, "fields": { "name": "Dictionary", "slug": "dictionary" } }, { "model": "taggit.tag", "pk": 19, "fields": { "name": "Drama", "slug": "drama" } }, { "model": "taggit.tag", "pk": 20, "fields": { "name": "Dystopian", "slug": "dystopian" } }, { "model": "taggit.tag", "pk": 21, "fields": { "name": "Encyclopedia", "slug": "encyclopedia" } }, { "model": "taggit.tag", "pk": 22, "fields": { "name": "Fantasy", "slug": "fantasy_1" } }, { "model": "taggit.tag", "pk": 23, "fields": { "name": "Fiction", "slug": "fiction" } }, { "model": "taggit.tag", "pk": 24, "fields": { "name": "Graphic Novels", "slug": "graphic-novels" } }, { "model": "taggit.tag", "pk": 25, "fields": { "name": "Guide", "slug": "guide" } }, { "model": "taggit.tag", "pk": 26, "fields": { "name": "Health", "slug": "health" } }, { "model": "taggit.tag", "pk": 27, "fields": { "name": "Historical Fiction", "slug": "historical-fiction" } }, { "model": "taggit.tag", "pk": 28, "fields": { "name": "History", "slug": "history_1" } }, { "model": "taggit.tag", "pk": 29, "fields": { "name": "Horror", "slug": "horror" } }, { "model": "taggit.tag", "pk": 30, "fields": { "name": "Journals", "slug": "journals" } }, { "model": "taggit.tag", "pk": 31, "fields": { "name": "Math", "slug": "math" } }, { "model": "taggit.tag", "pk": 32, "fields": { "name": "Memoir", "slug": "memoir" } }, { "model": "taggit.tag", "pk": 33, "fields": { "name": "Mystery", "slug": "mystery" } }, { "model": "taggit.tag", "pk": 34, "fields": { "name": "Non-Fiction", "slug": "non-fiction" } }, { "model": "taggit.tag", "pk": 35, "fields": { "name": "Paranormal", "slug": "paranormal" } }, { "model": "taggit.tag", "pk": 36, "fields": { "name": "Philosophy", "slug": "philosophy" } }, { "model": "taggit.tag", "pk": 37, "fields": { "name": "Poetry", "slug": "poetry" } }, { "model": "taggit.tag", "pk": 38, "fields": { "name": "Prayer Books", "slug": "prayer-books" } }, { "model": "taggit.tag", "pk": 39, "fields": { "name": "Psychology", "slug": "psychology" } }, { "model": "taggit.tag", "pk": 40, "fields": { "name": "Religion", "slug": "religion" } }, { "model": "taggit.tag", "pk": 41, "fields": { "name": "Romance", "slug": "romance" } }, { "model": "taggit.tag", "pk": 42, "fields": { "name": "Satire", "slug": "satire" } }, { "model": "taggit.tag", "pk": 43, "fields": { "name": "Science", "slug": "science" } }, { "model": "taggit.tag", "pk": 44, "fields": { "name": "Self-Help", "slug": "self-help" } }, { "model": "taggit.tag", "pk": 45, "fields": { "name": "Series", "slug": "series" } }, { "model": "taggit.tag", "pk": 46, "fields": { "name": "Short Stories", "slug": "short-stories" } }, { "model": "taggit.tag", "pk": 47, "fields": { "name": "Suspense", "slug": "suspense" } }, { "model": "taggit.tag", "pk": 48, "fields": { "name": "Thriller", "slug": "thriller" } }, { "model": "taggit.tag", "pk": 49, "fields": { "name": "Travel", "slug": "travel" } }, { "model": "taggit.tag", "pk": 50, "fields": { "name": "Trilogy", "slug": "trilogy" } }, { "model": "taggit.tag", "pk": 51, "fields": { "name": "True Crime", "slug": "true-crime" } }, { "model": "taggit.tag", "pk": 52, "fields": { "name": "Western", "slug": "western" } }, { "model": "taggit.tag", "pk": 53, "fields": { "name": "Young Adult", "slug": "young-adult" } }, { "model": "taggit.tag", "pk": 54, "fields": { "name": "Prolific", "slug": "prolific" } }, { "model": "taggit.tag", "pk": 55, "fields": { "name": "Bestseller", "slug": "bestseller" } }, { "model": "taggit.tag", "pk": 56, "fields": { "name": "Debut", "slug": "debut" } }, { "model": "taggit.tag", "pk": 57, "fields": { "name": "Award-Winning", "slug": "award-winning" } } ] django-taggit-6.1.0/sample_taggit/fixtures/0006_condition_tags.json000066400000000000000000000045521467620475500253200ustar00rootroot00000000000000[ { "model": "library_management.conditiontag", "pk": 1, "fields": { "name": "ripped", "slug": "ripped" } }, { "model": "library_management.conditiontag", "pk": 2, "fields": { "name": "signed", "slug": "signed" } }, { "model": "library_management.conditiontag", "pk": 3, "fields": { "name": "burnt", "slug": "burnt" } }, { "model": "library_management.conditiontag", "pk": 4, "fields": { "name": "Burned", "slug": "burned" } }, { "model": "library_management.conditiontag", "pk": 5, "fields": { "name": "Dog-eared", "slug": "dog-eared" } }, { "model": "library_management.conditiontag", "pk": 6, "fields": { "name": "Fair", "slug": "fair" } }, { "model": "library_management.conditiontag", "pk": 7, "fields": { "name": "Good", "slug": "good" } }, { "model": "library_management.conditiontag", "pk": 8, "fields": { "name": "Highlighted", "slug": "highlighted" } }, { "model": "library_management.conditiontag", "pk": 9, "fields": { "name": "Like New", "slug": "like-new" } }, { "model": "library_management.conditiontag", "pk": 10, "fields": { "name": "Loose Binding", "slug": "loose-binding" } }, { "model": "library_management.conditiontag", "pk": 11, "fields": { "name": "Missing Pages", "slug": "missing-pages" } }, { "model": "library_management.conditiontag", "pk": 12, "fields": { "name": "New", "slug": "new" } }, { "model": "library_management.conditiontag", "pk": 13, "fields": { "name": "Poor", "slug": "poor" } }, { "model": "library_management.conditiontag", "pk": 14, "fields": { "name": "Repaired", "slug": "repaired" } }, { "model": "library_management.conditiontag", "pk": 15, "fields": { "name": "Signed", "slug": "signed_1" } }, { "model": "library_management.conditiontag", "pk": 16, "fields": { "name": "Stained", "slug": "stained" } }, { "model": "library_management.conditiontag", "pk": 17, "fields": { "name": "Torn", "slug": "torn" } }, { "model": "library_management.conditiontag", "pk": 18, "fields": { "name": "Water Damaged", "slug": "water-damaged" } }, { "model": "library_management.conditiontag", "pk": 20, "fields": { "name": "First Edition", "slug": "first-edition" } } ] django-taggit-6.1.0/sample_taggit/fixtures/0007_tags.json000066400000000000000000005205121467620475500232520ustar00rootroot00000000000000[ { "model": "library_management.physicalcopy", "pk": 1, "fields": { "book": 159, "barcode": "8129a016-7de1-441e-863c-d4f04c42e842", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 2, "fields": { "book": 86, "barcode": "9db9ed5f-9050-4a2f-8226-17dfdbd05bf4", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 3, "fields": { "book": 96, "barcode": "20657068-1832-4679-82e4-b203c8c6ece6", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 4, "fields": { "book": 113, "barcode": "a5f280e3-7b59-40b6-b063-f95e12158da1", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 5, "fields": { "book": 96, "barcode": "85a7c16b-65db-4755-bd12-801bb324d27b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 6, "fields": { "book": 198, "barcode": "acd7f11f-326c-4bca-aa4f-f3305add6842", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 7, "fields": { "book": 97, "barcode": "ae351a1a-ba43-4101-8d9c-17901d67021a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 8, "fields": { "book": 58, "barcode": "6c0eba8e-aa52-4260-991d-b64b4774b6ad", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 9, "fields": { "book": 52, "barcode": "cfbb4b0e-b709-42b4-99fe-fc8dc5987863", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 10, "fields": { "book": 87, "barcode": "ff1a21c3-8d90-4772-a894-8e0e7e33cff3", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 11, "fields": { "book": 22, "barcode": "412961da-2ff7-48d5-b136-dfd71beafa6f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 12, "fields": { "book": 172, "barcode": "9f32e94d-8e6f-4a73-ac57-531d4c28a492", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 13, "fields": { "book": 186, "barcode": "0e781814-034d-41d3-a660-d92a254baa7e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 14, "fields": { "book": 155, "barcode": "eb53a0af-3def-4096-a0ec-7a7e062dbca6", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 15, "fields": { "book": 97, "barcode": "8b5ed9b4-ce2d-4ec9-bb19-3ecf589c4fba", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 16, "fields": { "book": 134, "barcode": "dc9b6edd-db64-4d84-a572-a8c2681728fb", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 17, "fields": { "book": 179, "barcode": "70e575ee-44d1-4f4c-993e-db4d970075cb", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 18, "fields": { "book": 91, "barcode": "f79269af-afb2-4233-88fc-0807cab33c5d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 19, "fields": { "book": 199, "barcode": "86f13ec4-75e3-45b9-b5a5-906931c5b47d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 20, "fields": { "book": 78, "barcode": "21dcc661-102f-4086-a7e2-876a0ea00ee8", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 21, "fields": { "book": 131, "barcode": "89e3c555-f5fb-47d1-81b8-55869868f276", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 22, "fields": { "book": 80, "barcode": "50dba2a3-6f15-418a-94c1-86abb75152db", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 23, "fields": { "book": 112, "barcode": "5b8c4a0d-4594-4987-b2fe-2558d3289402", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 24, "fields": { "book": 25, "barcode": "46fe16fc-1278-46f5-9198-33882edd05fc", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 25, "fields": { "book": 118, "barcode": "9bb7faa9-f58f-46a8-92ab-84c54a030158", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 26, "fields": { "book": 96, "barcode": "f4f04b46-2d77-4bbd-b530-0e82caa31043", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 27, "fields": { "book": 76, "barcode": "a285cee7-cb8e-4b6b-9d31-e623a1cbdf87", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 28, "fields": { "book": 69, "barcode": "5e76863d-ff0c-4d0f-b480-722fd334f0d9", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 29, "fields": { "book": 125, "barcode": "5b24a068-5b61-4e3c-825e-9381756b33d1", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 30, "fields": { "book": 165, "barcode": "33afcb16-8c05-4af6-b68b-7ee367e59cbd", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 31, "fields": { "book": 85, "barcode": "a3e0f387-4d53-45cb-8678-34d863400aac", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 32, "fields": { "book": 53, "barcode": "31b9d257-234b-4fef-b588-096bd7be9039", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 33, "fields": { "book": 200, "barcode": "069ada8b-f02c-404d-a964-2b59f87e4959", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 34, "fields": { "book": 128, "barcode": "4b4dbc5b-92c8-4926-a87e-2583902f47f8", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 35, "fields": { "book": 58, "barcode": "9459ab89-f1e6-4a42-95f7-0e4ad69d0c1d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 36, "fields": { "book": 20, "barcode": "317cbf09-eafa-439f-b38d-db2daebe6cb9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 37, "fields": { "book": 124, "barcode": "b331fa45-6162-45b2-9a50-8f10bbd36759", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 38, "fields": { "book": 4, "barcode": "8e42e3fd-46a1-4885-995b-8d2474afd5e3", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 39, "fields": { "book": 46, "barcode": "d1c3af67-eae8-4a75-b43e-1e908236f027", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 40, "fields": { "book": 179, "barcode": "8045f14d-f0ff-4128-97f9-265c05117a89", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 41, "fields": { "book": 42, "barcode": "9cbf587f-bcd2-48d3-9d8e-0c0b4a761b86", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 42, "fields": { "book": 62, "barcode": "b957f681-aa93-41e4-96e5-29bdd417bb31", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 43, "fields": { "book": 41, "barcode": "1294382e-ff81-4015-96ac-cc6961808d85", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 44, "fields": { "book": 117, "barcode": "b60eb2d4-e0ce-4bc2-87f6-5acce9aad55a", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 45, "fields": { "book": 47, "barcode": "02e7558c-bc4f-41c9-a606-1c06ea7c41b8", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 46, "fields": { "book": 168, "barcode": "03fcb773-4319-4b5c-9c42-d5b94dbdecee", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 47, "fields": { "book": 140, "barcode": "76d06c98-c7bf-495d-a556-a64c80788960", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 48, "fields": { "book": 56, "barcode": "d46054a4-4747-47ad-864b-70dbc55d8e1f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 49, "fields": { "book": 52, "barcode": "6b87d265-2feb-4895-8800-41a945cdcf78", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 50, "fields": { "book": 22, "barcode": "4d192064-ef2f-4fc8-9877-5fe407b8c830", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 51, "fields": { "book": 92, "barcode": "229924a8-c91e-407d-bd72-62af86a391b6", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 52, "fields": { "book": 35, "barcode": "9b62f39d-f354-40dd-9479-07438296e96a", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 53, "fields": { "book": 195, "barcode": "5c6b1f56-f6b2-4b4b-9262-c3f38a8e9c5b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 54, "fields": { "book": 175, "barcode": "e9b7e7c3-ad78-4ce0-9e37-52b832a54e07", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 55, "fields": { "book": 183, "barcode": "af98b45e-fab9-4f49-bd20-0c90ad238361", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 56, "fields": { "book": 137, "barcode": "2487b6a7-be42-46e9-9915-f7d774745ec8", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 57, "fields": { "book": 84, "barcode": "e98489f8-f802-4789-8e48-ec7f26f26776", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 58, "fields": { "book": 148, "barcode": "668219c5-7db8-4d04-b1c4-14e0b9d78d1e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 59, "fields": { "book": 174, "barcode": "5a908293-5388-4970-8d28-027b01999ff5", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 60, "fields": { "book": 26, "barcode": "5fe7425b-80c7-45dd-aada-3060e7fe3bb0", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 61, "fields": { "book": 58, "barcode": "0c2f52c6-d235-4b02-94a4-9ccf26fafcaf", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 62, "fields": { "book": 76, "barcode": "3f890480-1a0b-4120-872f-d0314e608965", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 63, "fields": { "book": 89, "barcode": "17fa9c66-ac50-4e16-b192-eaa6f04d9912", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 64, "fields": { "book": 113, "barcode": "54780622-0749-4b4c-b978-47259e313340", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 65, "fields": { "book": 184, "barcode": "96937ccb-f71f-4e4b-8969-e84d8588b0af", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 66, "fields": { "book": 33, "barcode": "4ffb692c-abf0-43b0-9325-cd1f439aebcb", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 67, "fields": { "book": 95, "barcode": "151bcbf5-d3e6-4ba5-9b32-6e1603f324e6", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 68, "fields": { "book": 38, "barcode": "94834af5-1d38-4307-8372-39763a968150", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 69, "fields": { "book": 112, "barcode": "d9f9f8a7-289b-46d8-9751-aea11a6de58a", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 70, "fields": { "book": 116, "barcode": "7a7aaf7b-2a71-4b78-928c-313f7f1a1324", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 71, "fields": { "book": 48, "barcode": "6fbedd43-1504-4389-a569-977bd65b3754", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 72, "fields": { "book": 77, "barcode": "6ee243a1-ec91-4976-9bc8-7e94668567fa", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 73, "fields": { "book": 96, "barcode": "e42da673-d35a-40aa-81e4-11c307ecb6d7", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 74, "fields": { "book": 128, "barcode": "57118101-4ef5-48f1-86b5-a19eba6ba72b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 75, "fields": { "book": 54, "barcode": "7894ca87-fbeb-4f30-8dad-340a289e4559", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 76, "fields": { "book": 92, "barcode": "8a8257d1-0eff-4433-a913-1a4ad07d1c0f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 77, "fields": { "book": 177, "barcode": "4d01035b-092a-468c-82e4-6cdf0e68e00f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 78, "fields": { "book": 146, "barcode": "9482dbd7-357d-4be1-a2f5-d6a576c60443", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 79, "fields": { "book": 113, "barcode": "e895178a-649d-4178-b877-d0dc6c077dfa", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 80, "fields": { "book": 22, "barcode": "d438a091-252c-4045-b03f-e9356934e39e", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 81, "fields": { "book": 135, "barcode": "e93f16d5-2185-4b11-81fa-1137bc5b5b50", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 82, "fields": { "book": 18, "barcode": "8966ad66-ed4f-4d18-8ad2-d17e25ba007a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 83, "fields": { "book": 75, "barcode": "6773584d-a635-47da-958f-94babad8b02b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 84, "fields": { "book": 115, "barcode": "258b2c6f-97cf-483f-a24d-333b260cc30e", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 85, "fields": { "book": 63, "barcode": "9ad41a8f-777c-4634-928f-6753d332707d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 86, "fields": { "book": 163, "barcode": "dfe3b397-aec0-4d7e-84cd-d442eb06e866", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 87, "fields": { "book": 173, "barcode": "f43c404f-05ed-452c-af45-8eb90364176e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 88, "fields": { "book": 87, "barcode": "6482d17d-9b13-4e5b-bc54-959edffebcb4", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 89, "fields": { "book": 25, "barcode": "1f6941fb-a13f-4e56-a1b2-3b82ff16124b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 90, "fields": { "book": 3, "barcode": "fa8becef-f680-4549-aeb2-9549ae9ec8b3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 91, "fields": { "book": 26, "barcode": "08d1d3bd-c691-4f54-ace2-bc94ddb05f13", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 92, "fields": { "book": 146, "barcode": "8738a6fa-92f4-4ff5-8129-6ad1cec00c4e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 93, "fields": { "book": 11, "barcode": "7bc63afd-b16e-4fe8-938f-c11276350725", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 94, "fields": { "book": 186, "barcode": "f7a32ffc-b148-42fa-ba52-349335fc5978", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 95, "fields": { "book": 182, "barcode": "4d1fe05d-dfa4-44ab-9ec4-77f6fbc30bd0", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 96, "fields": { "book": 70, "barcode": "6e1a1e7e-5a7b-44b8-8394-999c02812339", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 97, "fields": { "book": 87, "barcode": "60f94867-9f64-4b28-bff2-2acbdf88378d", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 98, "fields": { "book": 35, "barcode": "a548122c-1af5-4938-985e-7aedc1ab6187", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 99, "fields": { "book": 81, "barcode": "5d00f876-34df-4fd1-9b6d-dfa654d01f37", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 100, "fields": { "book": 38, "barcode": "64a93edf-c4aa-4338-82a0-06be9c22f8c9", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 101, "fields": { "book": 154, "barcode": "8f1d124d-325e-4300-9368-3d80821fe95a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 102, "fields": { "book": 144, "barcode": "52ab3681-a085-4518-af50-2650ba802aa1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 103, "fields": { "book": 79, "barcode": "d56ede40-38cc-493a-8755-0d63a8eec0e3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 104, "fields": { "book": 25, "barcode": "c77e987b-ac75-4654-9063-c13932e71747", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 105, "fields": { "book": 190, "barcode": "03022fed-5032-4729-b285-fa2ba0ed0da3", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 106, "fields": { "book": 108, "barcode": "16186da0-c0b4-42ad-8be0-3e209d249b94", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 107, "fields": { "book": 18, "barcode": "e2cfb201-c5e0-4160-9ca3-2f3cbf584120", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 108, "fields": { "book": 104, "barcode": "04492fcf-4b7d-4474-9cae-4502e9c7ae89", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 109, "fields": { "book": 86, "barcode": "67797ed9-3f9f-4215-8a41-99e44e139cf1", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 110, "fields": { "book": 156, "barcode": "e929a758-c6b7-4d2d-9b41-a075dd2056d5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 111, "fields": { "book": 1, "barcode": "e0db53b8-b8e2-4f20-82e0-ad88ac4cc4bb", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 112, "fields": { "book": 56, "barcode": "8f57cb24-c356-4d6b-848d-aa0e187d4554", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 113, "fields": { "book": 185, "barcode": "72d335d8-cff8-4cc5-bb0a-7c76c4fbab44", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 114, "fields": { "book": 48, "barcode": "1d827493-f2d6-4729-8a68-625d07a1f5b8", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 115, "fields": { "book": 112, "barcode": "db297c3d-d957-4c41-b2d4-4ab5e044fae1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 116, "fields": { "book": 84, "barcode": "972bf0cd-5af1-42fc-99f2-b1d20190116f", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 117, "fields": { "book": 35, "barcode": "69be0dbb-74ad-4153-aea4-a390fe52369f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 118, "fields": { "book": 82, "barcode": "a317cccf-fa0d-4559-8347-418a6d5bb782", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 119, "fields": { "book": 147, "barcode": "a486b016-374d-49e9-881b-19bacf22346c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 120, "fields": { "book": 48, "barcode": "6a842ffd-a287-4e81-aced-bcfdfd3dcea4", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 121, "fields": { "book": 177, "barcode": "87e6c971-108b-404e-96c2-ba9fb39bc2f5", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 122, "fields": { "book": 116, "barcode": "7dfdc719-eb03-4cb0-a76e-34a70b10f77f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 123, "fields": { "book": 63, "barcode": "04356be3-2192-4f27-9c23-f1b965b7bbcf", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 124, "fields": { "book": 61, "barcode": "8c173bd5-f5db-46cf-8548-5e90aeed073b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 125, "fields": { "book": 187, "barcode": "5bd48bfe-9c2c-4379-bfc9-3be684b0d2ed", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 126, "fields": { "book": 18, "barcode": "5a119402-3fce-415a-8113-5a11722ab7d0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 127, "fields": { "book": 86, "barcode": "1dca580e-bb91-4a5a-8b4b-22d8b3a87245", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 128, "fields": { "book": 74, "barcode": "77e70d35-f656-4e29-8c44-529ca5c2d5e3", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 129, "fields": { "book": 4, "barcode": "fccb7ddd-cebf-4931-9641-a6f98c3d47b8", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 130, "fields": { "book": 11, "barcode": "d6088111-d477-4ddc-9305-e50748d03882", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 131, "fields": { "book": 184, "barcode": "b82f9d05-d43f-4842-93e9-3b4a5de5749f", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 132, "fields": { "book": 66, "barcode": "b57ecafb-f1dc-4aa3-8950-e8c3445a3494", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 133, "fields": { "book": 2, "barcode": "61086efe-860e-45a2-a4f5-e0695984718a", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 134, "fields": { "book": 57, "barcode": "f10f013e-ca73-4b00-b546-1d056ae2d508", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 135, "fields": { "book": 6, "barcode": "bfe250d5-303d-4259-9df4-7540bf5848ea", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 136, "fields": { "book": 13, "barcode": "ed6069a7-9c8f-4b0c-b95a-1704883cc2e2", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 137, "fields": { "book": 134, "barcode": "a4e5f9d1-1fb7-47c9-94ea-66987d059ee2", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 138, "fields": { "book": 188, "barcode": "8c023a64-e526-414a-a7ac-aa2512ef2dbd", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 139, "fields": { "book": 95, "barcode": "076b91a9-1e95-4d6d-83e8-8fbe6207b8a8", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 140, "fields": { "book": 25, "barcode": "cfb534ef-33a4-4faf-8316-ed9d08c62a91", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 141, "fields": { "book": 34, "barcode": "d12b6f1a-b2fc-4644-b523-ec4a6383db41", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 142, "fields": { "book": 53, "barcode": "166d2936-a1d3-4ede-a5f7-19d993e36cdd", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 143, "fields": { "book": 48, "barcode": "bf795fd3-a2af-41ae-b3b9-28e13826c961", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 144, "fields": { "book": 9, "barcode": "251a6efc-6a97-4b9b-9d7b-11361b467a4e", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 145, "fields": { "book": 108, "barcode": "d6b33f08-f914-42b4-93df-f0fdd291d5c7", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 146, "fields": { "book": 163, "barcode": "8bc9aab6-fa79-45db-bc5b-b252bd801dc0", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 147, "fields": { "book": 3, "barcode": "c2d85809-d82b-4998-bc10-e3ff57683823", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 148, "fields": { "book": 51, "barcode": "270e2238-b645-455d-9e29-d75023c47591", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 149, "fields": { "book": 147, "barcode": "6160e455-9386-40be-8de4-d3c553b0972a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 150, "fields": { "book": 139, "barcode": "268b33fb-0518-4039-9970-22fda3623a11", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 151, "fields": { "book": 188, "barcode": "f6aba64e-b838-4351-a5a7-b359ace49921", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 152, "fields": { "book": 58, "barcode": "ae9d218c-a3a4-4e52-bbbc-88185fa3e705", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 153, "fields": { "book": 117, "barcode": "b91d3a2d-6158-4e4c-80a8-5f82980222d9", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 154, "fields": { "book": 80, "barcode": "6a59b3e3-114f-47e4-9f2b-4a7f219c3788", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 155, "fields": { "book": 200, "barcode": "d9ccefdf-266d-4b08-a882-0999fe5f804e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 156, "fields": { "book": 149, "barcode": "6f11c51f-f6aa-4659-a971-6c5a4d1ff18e", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 157, "fields": { "book": 109, "barcode": "648f81b9-57e3-4169-84e8-6616fbbe15be", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 158, "fields": { "book": 131, "barcode": "669b7b2f-c9f0-4267-9bcf-91f93a56285f", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 159, "fields": { "book": 187, "barcode": "7473e235-a6f0-4784-9690-fd0def5e04b8", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 160, "fields": { "book": 152, "barcode": "f76a03b3-5d00-49be-a55b-e0dc1f2a0687", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 161, "fields": { "book": 46, "barcode": "60d2bc1a-0358-4e64-920e-873aa7066cf4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 162, "fields": { "book": 68, "barcode": "ce5ad433-7a0c-4045-85a9-1dd56d841261", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 163, "fields": { "book": 53, "barcode": "a32c83c6-6a26-486d-8821-c3a6f32449c8", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 164, "fields": { "book": 161, "barcode": "fed0f73f-0009-4d43-a5e6-02d8c7029315", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 165, "fields": { "book": 79, "barcode": "d772e736-3888-441f-8b03-885fe57230bf", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 166, "fields": { "book": 89, "barcode": "0006f1d5-fa28-4425-9d85-e3aa013a725c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 167, "fields": { "book": 45, "barcode": "7858dc11-1fe3-4fee-830f-80c81ee4d545", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 168, "fields": { "book": 87, "barcode": "f279afc2-9b54-49d4-8ec7-6d405274aefd", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 169, "fields": { "book": 180, "barcode": "ac96d5db-0e30-418d-9dd3-1ec80b1e6d8f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 170, "fields": { "book": 155, "barcode": "b4857c62-6dcc-4dba-bbdc-b6721de3be7a", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 171, "fields": { "book": 76, "barcode": "f9c16a20-7c5f-4b2b-aa44-aa7eba762c2d", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 172, "fields": { "book": 30, "barcode": "ab8fcb8f-b801-464f-b2d9-35b73eb344cc", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 173, "fields": { "book": 58, "barcode": "15ced4b2-678c-4d6b-bdb1-954faa508e2d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 174, "fields": { "book": 23, "barcode": "460d8918-d36a-4a6e-8000-34e9520e3eb7", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 175, "fields": { "book": 160, "barcode": "7a038ec5-c828-4645-825b-b706deaf7bba", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 176, "fields": { "book": 149, "barcode": "d97714ec-33b3-49df-8ed1-5281628fe082", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 177, "fields": { "book": 98, "barcode": "c1389011-2fe0-4176-9970-7b784946c322", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 178, "fields": { "book": 121, "barcode": "24339f12-8570-494f-9c51-d621e5de2e70", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 179, "fields": { "book": 139, "barcode": "cf155f02-c98f-4f48-a586-d71a21566d8a", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 180, "fields": { "book": 135, "barcode": "f321a9fb-908c-42a4-91f2-e5af76ec117c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 181, "fields": { "book": 38, "barcode": "03ae0ba8-ddbc-4a2b-a894-3048b6092638", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 182, "fields": { "book": 52, "barcode": "2e302cec-da52-4903-b86f-0308896569b1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 183, "fields": { "book": 107, "barcode": "b381d0c2-5c50-45c2-9ada-98e84bd14c2d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 184, "fields": { "book": 30, "barcode": "5e754853-879d-4dc9-93e7-2335d79eab55", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 185, "fields": { "book": 192, "barcode": "dad68a88-d408-4036-b439-4ad5e08bb602", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 186, "fields": { "book": 154, "barcode": "a102e051-b53d-4be6-b4e4-560154f674df", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 187, "fields": { "book": 95, "barcode": "f7cff3f8-fe12-4aa1-9923-af1f7ea9ec34", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 188, "fields": { "book": 97, "barcode": "f0c0a1e0-0d36-4a90-bb45-5e8c1e7fa66d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 189, "fields": { "book": 188, "barcode": "694d0ba1-28f3-4f9f-812a-a5403c9a47fe", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 190, "fields": { "book": 194, "barcode": "a67d05f3-205d-4b07-9937-d49f1aea35eb", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 191, "fields": { "book": 121, "barcode": "2b6b13ff-e6d0-45aa-ad6b-e26a02cdca35", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 192, "fields": { "book": 107, "barcode": "94dd86dd-db17-48f1-a787-4c8a29f1df69", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 193, "fields": { "book": 117, "barcode": "b9a9c19a-5481-4c33-b04f-fd8233c1b761", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 194, "fields": { "book": 55, "barcode": "70e0417a-5f57-4a69-976c-cae0f7f5265f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 195, "fields": { "book": 161, "barcode": "bf2e0e65-c949-4477-a199-3d3957bb4f89", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 196, "fields": { "book": 200, "barcode": "49bc25d1-9a5c-43d5-b9b7-a92a2bc471da", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 197, "fields": { "book": 53, "barcode": "d23b07f7-9206-4692-90dd-3f95f6473c7f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 198, "fields": { "book": 189, "barcode": "164bb91c-b7c9-448a-8181-86826bb329b7", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 199, "fields": { "book": 139, "barcode": "af9d28ef-a21b-49cf-b63c-25761e77e851", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 200, "fields": { "book": 187, "barcode": "5e8509eb-4d9d-4150-9106-9f72bf8cb0da", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 201, "fields": { "book": 74, "barcode": "fe7948e3-ad0a-4594-92ed-bf8961eb8b4e", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 202, "fields": { "book": 176, "barcode": "e6d53b82-96c6-4c9e-a330-3c7738459e4f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 203, "fields": { "book": 184, "barcode": "3b731ec4-c049-4c7a-bab1-c0eff4139da5", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 204, "fields": { "book": 177, "barcode": "47df2c07-1b81-4928-930e-b63228730e16", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 205, "fields": { "book": 149, "barcode": "9dd34b96-90c5-405e-9f61-796e6e6d60c4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 206, "fields": { "book": 49, "barcode": "6a563ec6-810c-4895-a411-ec9eb1a4b8ec", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 207, "fields": { "book": 159, "barcode": "66cd1db4-38f7-486f-9f26-2b039e490010", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 208, "fields": { "book": 155, "barcode": "fec63607-dd35-4075-9def-2422386608f4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 209, "fields": { "book": 59, "barcode": "e03ed48a-fcb4-4b8a-ac77-4a20c2a52f7f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 210, "fields": { "book": 40, "barcode": "7947cc50-ec6c-4d77-8a6d-1e81b7b479eb", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 211, "fields": { "book": 170, "barcode": "cc3df201-b500-4cdf-bc05-6a49167c5948", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 212, "fields": { "book": 172, "barcode": "1d6deed0-42a5-4ea5-9297-ee8bf7705c16", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 213, "fields": { "book": 76, "barcode": "248c3fd6-6352-406c-851f-af1f0d61735c", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 214, "fields": { "book": 166, "barcode": "c835eaa1-992e-4df1-af6c-75b371f383e8", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 215, "fields": { "book": 91, "barcode": "96463dc1-e176-497c-8075-15a88f69b58b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 216, "fields": { "book": 109, "barcode": "35ec45a4-beee-43c4-a617-eb76066730be", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 217, "fields": { "book": 67, "barcode": "7fc06b53-3528-4570-b3f7-08210b23a077", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 218, "fields": { "book": 11, "barcode": "2e502c97-5282-47e9-8b18-9fe2d0d5ab8c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 219, "fields": { "book": 157, "barcode": "0e1c5a89-7818-4419-ae4e-2d643a076c8b", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 220, "fields": { "book": 79, "barcode": "fe087375-36d5-4052-886b-8030ecd5c2df", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 221, "fields": { "book": 65, "barcode": "825249d8-3a98-49ff-8f77-66ea987558e6", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 222, "fields": { "book": 88, "barcode": "a8ba21a1-31b9-4319-b6c2-2896ffad753a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 223, "fields": { "book": 68, "barcode": "4cb320c6-2992-4bf7-8a32-b68a62ca03e8", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 224, "fields": { "book": 142, "barcode": "b498054c-e2e5-40ea-a1da-9000dc900f3c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 225, "fields": { "book": 184, "barcode": "a998fdf6-d9f7-4cc1-8c6f-51cdef676e1a", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 226, "fields": { "book": 53, "barcode": "0200af5a-c077-480f-a127-afe273b1bb36", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 227, "fields": { "book": 148, "barcode": "15a8792a-71d3-4a1d-a972-d15a2b6251c5", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 228, "fields": { "book": 50, "barcode": "4a4faaac-e0c2-4baa-87cb-2f1100729ec3", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 229, "fields": { "book": 126, "barcode": "e2ef56b9-2899-4bce-9aa9-4cd8e1391566", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 230, "fields": { "book": 91, "barcode": "89d96095-1311-4a27-8efd-da3b0b88df20", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 231, "fields": { "book": 69, "barcode": "dce29c9c-0b30-43fb-b28b-b93dc7fe0f7d", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 232, "fields": { "book": 156, "barcode": "8cc5fd0d-e834-4be6-a7cd-8988561b5711", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 233, "fields": { "book": 183, "barcode": "d3ac7458-a456-4b8a-b4b2-d15ccb992d49", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 234, "fields": { "book": 106, "barcode": "da6422d6-7839-4fc9-b7f7-eb04f6e32e69", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 235, "fields": { "book": 30, "barcode": "daa15d6d-161b-454f-84a2-4c60c20ff4ad", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 236, "fields": { "book": 149, "barcode": "48fc5c4e-6aa5-4a58-bc7c-8942bb51d6a4", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 237, "fields": { "book": 25, "barcode": "0340532e-3400-4d25-8bf9-095ce8160ca6", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 238, "fields": { "book": 46, "barcode": "77068087-f13e-442d-9d38-24b24d9afcb4", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 239, "fields": { "book": 8, "barcode": "96ab7373-e035-4674-a47b-8ae543f0386b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 240, "fields": { "book": 49, "barcode": "a0ccb278-5458-4604-bf75-aae02dbf9e1e", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 241, "fields": { "book": 19, "barcode": "45b73084-d3af-4913-a14c-28f1937ea4bc", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 242, "fields": { "book": 119, "barcode": "998d3852-c450-49e4-8cba-d5808e8b0480", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 243, "fields": { "book": 61, "barcode": "85ddc249-f5bd-4ce5-b456-5c8df46e7701", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 244, "fields": { "book": 45, "barcode": "bcb1522a-e8a0-4eee-9869-d3025880d5ef", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 245, "fields": { "book": 94, "barcode": "834fc719-7b9d-4fd4-84bc-8f913b11250e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 246, "fields": { "book": 121, "barcode": "1954d5c9-b289-48a4-986d-ea6a048f9042", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 247, "fields": { "book": 93, "barcode": "d0eef19e-fc67-4f35-ae33-b350d15ab593", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 248, "fields": { "book": 85, "barcode": "6baff495-4333-4967-b302-c3671178833f", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 249, "fields": { "book": 190, "barcode": "3a7853da-9bf0-4ca4-8901-bb2aa1684ff2", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 250, "fields": { "book": 58, "barcode": "55a0fd88-0c36-41de-9514-275cdbb77cd7", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 251, "fields": { "book": 141, "barcode": "10550268-1489-4ac7-9450-518c5b1f3c4d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 252, "fields": { "book": 195, "barcode": "a1ca0bf6-7cec-498c-9512-0ef7f9bec63b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 253, "fields": { "book": 38, "barcode": "59b0c8d1-39db-4c1a-bf4f-b2fa1ebc9804", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 254, "fields": { "book": 196, "barcode": "cdd298f9-5566-4384-83ad-19b72d825d67", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 255, "fields": { "book": 7, "barcode": "4d92dc2f-6efa-4c88-a374-6b3289b707c0", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 256, "fields": { "book": 116, "barcode": "1bb71afb-fc3b-491c-8fb1-83c5ce0d9a34", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 257, "fields": { "book": 44, "barcode": "7e9ea49c-a037-4d34-9200-88a64212c530", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 258, "fields": { "book": 136, "barcode": "52e8b4db-10ed-415c-baf0-7fae6a9346bf", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 259, "fields": { "book": 112, "barcode": "f748dacb-6c17-441d-82e0-abe4d95c30ba", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 260, "fields": { "book": 8, "barcode": "ad61a2c2-d0bf-4c99-bc5e-45f546faff9c", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 261, "fields": { "book": 66, "barcode": "670f9b47-0a8b-4999-9f7a-2135d6a7ef88", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 262, "fields": { "book": 198, "barcode": "ebd3ba9a-18bf-4bf9-b8ad-9b0c0d1d586a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 263, "fields": { "book": 48, "barcode": "5262bb85-a872-41a9-b4c5-50843755917d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 264, "fields": { "book": 122, "barcode": "c47ab93f-bcdf-444f-a5d5-b62610a79845", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 265, "fields": { "book": 129, "barcode": "f4a811e5-5633-47b7-863b-9331e1a2f2e6", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 266, "fields": { "book": 1, "barcode": "0fb438e7-05f9-475f-b859-23a29d3c7f51", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 267, "fields": { "book": 84, "barcode": "2808a956-cb9a-4f74-b3e3-2796245732df", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 268, "fields": { "book": 117, "barcode": "a508484e-14ed-4551-a5ae-4f4e9861bb4c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 269, "fields": { "book": 191, "barcode": "dbafb0fc-5e67-4815-928f-c85ed564e27a", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 270, "fields": { "book": 153, "barcode": "2922ff72-3253-4ece-a8fd-f812234bc358", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 271, "fields": { "book": 55, "barcode": "e9ca4b31-44c7-4d76-a7dd-5d3e7287fb24", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 272, "fields": { "book": 183, "barcode": "46a4beb3-0202-4ad8-afb0-caf369da0686", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 273, "fields": { "book": 107, "barcode": "632d1050-9171-451b-a0df-0b5e32736657", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 274, "fields": { "book": 70, "barcode": "c9a0a448-9b76-43fd-b981-b9451e3901f6", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 275, "fields": { "book": 31, "barcode": "4fcb9e0b-a711-43c9-a394-d2e26619d038", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 276, "fields": { "book": 96, "barcode": "ded6f1d6-03e3-4ed0-b9b1-5365ee90893c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 277, "fields": { "book": 44, "barcode": "49d1c58d-386f-46fd-bfa1-03a14f2f1c70", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 278, "fields": { "book": 93, "barcode": "439be7f1-70fe-4f8f-967d-f87736f1b798", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 279, "fields": { "book": 126, "barcode": "a2a1be25-ffe0-4025-b957-22d981ba58a4", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 280, "fields": { "book": 109, "barcode": "f42c828d-dec4-4097-8948-e4c4ec3f79b3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 281, "fields": { "book": 190, "barcode": "1cb842be-fa98-44f6-b497-c096a8d41697", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 282, "fields": { "book": 199, "barcode": "9ba516b8-0cae-4063-9cac-4b2268348e0c", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 283, "fields": { "book": 173, "barcode": "d1eed89f-02a8-48b5-980f-d222a1f4af0b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 284, "fields": { "book": 167, "barcode": "48acb240-54b8-4f7f-b960-cacb88ac8f6d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 285, "fields": { "book": 111, "barcode": "8890fdc0-5c53-4291-ade4-70178ff57884", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 286, "fields": { "book": 151, "barcode": "c0d37c79-3a93-471f-9ae9-ecb4dfbc46a1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 287, "fields": { "book": 1, "barcode": "abd7f88e-d635-43c0-b741-869219f725c2", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 288, "fields": { "book": 56, "barcode": "dc3c5fd4-15e5-464e-b4d2-3abdb53e8fdd", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 289, "fields": { "book": 121, "barcode": "6406a88c-cfd6-4246-814d-2cc144978128", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 290, "fields": { "book": 134, "barcode": "97662288-324a-48d0-87ec-dcf11661f0fe", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 291, "fields": { "book": 107, "barcode": "38db2699-baab-485b-bba9-c5c636c57223", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 292, "fields": { "book": 166, "barcode": "48c4e94b-4026-431e-80dd-13b84c8769d8", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 293, "fields": { "book": 157, "barcode": "38f02168-68dd-4d6b-8905-af2b8eeda4a9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 294, "fields": { "book": 79, "barcode": "d2b2955e-3434-46dd-aa77-431f0eb61b1a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 295, "fields": { "book": 158, "barcode": "97672128-1466-4011-b5eb-9c1c2020b6a4", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 296, "fields": { "book": 193, "barcode": "926f2b4f-2766-4a8e-b912-c3e0ba2daa64", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 297, "fields": { "book": 56, "barcode": "abc49e75-55ad-45e1-b896-15c896de7e5b", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 298, "fields": { "book": 17, "barcode": "0f8dcd2d-173d-4832-8396-04247fd01617", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 299, "fields": { "book": 137, "barcode": "2774a597-f7d0-4527-bb18-1875dd95190f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 300, "fields": { "book": 87, "barcode": "cd0f4589-fc7b-4eb1-b5c9-c14fea15668f", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 301, "fields": { "book": 196, "barcode": "b09dd273-01ef-42e0-a8ae-102868e23f69", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 302, "fields": { "book": 2, "barcode": "8d411f2c-7886-4fa0-afcb-18327ffc039b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 303, "fields": { "book": 39, "barcode": "2900068f-217b-461c-9602-83c898329b33", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 304, "fields": { "book": 117, "barcode": "50a6078a-2730-44ea-94fc-40e440b1b0cf", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 305, "fields": { "book": 128, "barcode": "dc39696a-91f7-46f8-870e-a149e39887e0", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 306, "fields": { "book": 126, "barcode": "7b25c2ef-2c1a-49db-b37d-943d6fdd2f0e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 307, "fields": { "book": 13, "barcode": "78a10f18-74a7-461c-b4ba-29fea33deb97", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 308, "fields": { "book": 84, "barcode": "e6b8fc64-b34b-4516-a7dd-1b0a6a1f0aa9", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 309, "fields": { "book": 142, "barcode": "0f610e7b-ea29-4533-a658-dbdb68ff3849", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 310, "fields": { "book": 118, "barcode": "2d36284c-39c0-4aa0-9e61-b3432b23c340", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 311, "fields": { "book": 172, "barcode": "c0e9419e-f936-49a7-ada1-30ae10902d08", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 312, "fields": { "book": 106, "barcode": "92c609b4-f4ea-4ed7-add3-57d103840691", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 313, "fields": { "book": 139, "barcode": "2aa4c461-2c9e-4730-a402-0eee45be3632", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 314, "fields": { "book": 168, "barcode": "09c752e8-1e21-4311-b020-d366046bf958", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 315, "fields": { "book": 62, "barcode": "23ea2cff-80e1-4d6c-ac51-321a29436c6a", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 316, "fields": { "book": 75, "barcode": "d1ad66b5-26b3-4a01-8c67-42aa6b538bf1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 317, "fields": { "book": 184, "barcode": "d9429786-3036-4630-b3c9-c99df4d787bf", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 318, "fields": { "book": 116, "barcode": "a0c19202-1413-4249-bb1d-02c452b779b9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 319, "fields": { "book": 22, "barcode": "2d23290d-dcc7-40ed-bb3d-3af848f9b0b9", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 320, "fields": { "book": 146, "barcode": "58cde765-1fac-4775-8832-862e0c799fd3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 321, "fields": { "book": 29, "barcode": "8c776017-58d9-4d55-a80a-2381d2a198e9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 322, "fields": { "book": 117, "barcode": "bace1bfe-48c4-49d9-b002-2d408ca12a42", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 323, "fields": { "book": 66, "barcode": "259c6ae8-4413-4317-be42-89564be35837", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 324, "fields": { "book": 172, "barcode": "3b353e36-e953-43e9-a684-c6e369944d53", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 325, "fields": { "book": 107, "barcode": "4fd414f1-bced-4571-9569-4c951c6cdc56", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 326, "fields": { "book": 57, "barcode": "29f80cd8-f600-49ca-af75-8fb5550ea8ab", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 327, "fields": { "book": 83, "barcode": "8cfa3856-478a-4fcf-9f0c-6892e1e1a85e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 328, "fields": { "book": 9, "barcode": "56608b5f-1635-454a-a4e8-10b992ebaf6e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 329, "fields": { "book": 198, "barcode": "287019b2-2f25-488d-b9af-aaa9153e3d2d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 330, "fields": { "book": 76, "barcode": "3a7a12a5-02d8-4f0f-b1bd-1e0676581071", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 331, "fields": { "book": 178, "barcode": "2ded7992-c7b0-481c-9120-252eb994f145", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 332, "fields": { "book": 29, "barcode": "93b7c60d-df0d-4590-b9c5-1171c8233ac0", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 333, "fields": { "book": 44, "barcode": "3c1234e8-7391-4e00-a1d0-9c7c5e5993b5", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 334, "fields": { "book": 45, "barcode": "1d282703-3016-4574-a28c-87a5ac80755b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 335, "fields": { "book": 149, "barcode": "b078b510-8d7a-4c4a-b4eb-e62f9fb143e7", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 336, "fields": { "book": 6, "barcode": "d61f8218-6f63-4ed4-98d5-d678ac0bd5f1", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 337, "fields": { "book": 143, "barcode": "cf1b37eb-96df-4f18-b98f-6a42d48e35f5", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 338, "fields": { "book": 89, "barcode": "d224fc32-e666-4aba-8b34-9b85174709a3", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 339, "fields": { "book": 62, "barcode": "4720a514-d175-468e-b901-000f1caebc1b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 340, "fields": { "book": 47, "barcode": "aec84a34-fa3a-458e-b651-0928f30b7f0a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 341, "fields": { "book": 185, "barcode": "31045839-3a89-42ec-a8c9-cfe6ac6f1157", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 342, "fields": { "book": 155, "barcode": "fed6ab29-2ad6-4f73-93c9-6b2451891fe5", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 343, "fields": { "book": 178, "barcode": "92928da6-1cea-463a-bff6-a7c6bc72c046", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 344, "fields": { "book": 148, "barcode": "94937531-c220-4b1d-95b0-4b032a001224", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 345, "fields": { "book": 146, "barcode": "5a9223d1-7efd-4435-a3b8-7e0e65d57be4", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 346, "fields": { "book": 79, "barcode": "6050e47f-bf16-4d57-97f2-d44375f166e3", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 347, "fields": { "book": 171, "barcode": "6c733835-09e4-4f3c-833d-f35c140d8cbd", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 348, "fields": { "book": 199, "barcode": "c79e8f3f-8dc1-4a45-b019-a8b305af29b6", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 349, "fields": { "book": 55, "barcode": "6b99db59-ba9e-4e0f-8e7f-68ad210805b6", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 350, "fields": { "book": 98, "barcode": "2bcad7b5-e05f-414b-99bc-69f133afa2b3", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 351, "fields": { "book": 37, "barcode": "97204d5c-74e0-464c-9bad-92c1aa1ed720", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 352, "fields": { "book": 12, "barcode": "83420027-9e1a-4c59-8a66-0e4507320e35", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 353, "fields": { "book": 108, "barcode": "c5887ea3-0af6-4195-8d3a-47d283f2b5a2", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 354, "fields": { "book": 51, "barcode": "981cd184-4c15-4917-856a-fbf24150b28b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 355, "fields": { "book": 74, "barcode": "bd9b4e29-a1f1-4373-bec4-1e8b711e6f5f", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 356, "fields": { "book": 74, "barcode": "77e92a60-62ae-4b9d-aad3-39cf1946667e", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 357, "fields": { "book": 76, "barcode": "f5a67446-5471-4480-854b-c0d0f7d9e3a5", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 358, "fields": { "book": 68, "barcode": "94708a6f-e157-41e9-865d-80865cb081ba", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 359, "fields": { "book": 83, "barcode": "13f5bd4a-bd01-4ca7-873a-1affde7f946d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 360, "fields": { "book": 144, "barcode": "5f9fbce7-8d16-46ba-856a-c5641e5bd807", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 361, "fields": { "book": 171, "barcode": "7a175e28-0931-4f04-81da-2c0054912c6b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 362, "fields": { "book": 192, "barcode": "7beeeb5d-485c-43e2-80b1-5bcf9c723bd0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 363, "fields": { "book": 53, "barcode": "b1e639b0-7f40-475c-b225-2da22770b27c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 364, "fields": { "book": 182, "barcode": "811ee51e-4069-44d2-a110-901fb4a7a7f1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 365, "fields": { "book": 171, "barcode": "cd47a02f-605b-4f66-91d8-477d08ab38a1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 366, "fields": { "book": 167, "barcode": "70aaf41a-4649-48cb-a4ea-3f8a1c9cb886", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 367, "fields": { "book": 39, "barcode": "27b4d07a-5bd8-4fdb-a138-688477ff1edb", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 368, "fields": { "book": 122, "barcode": "7ec8827c-4f3d-4cc9-85ea-4a62c08df591", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 369, "fields": { "book": 50, "barcode": "66dc2c83-1857-4961-a9e8-ae36565948ab", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 370, "fields": { "book": 198, "barcode": "b1ff2166-79db-4188-b911-8cc329ccd925", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 371, "fields": { "book": 172, "barcode": "0a0961a0-2e89-4e37-b33c-06d465b16bca", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 372, "fields": { "book": 14, "barcode": "5c51cd4f-b43d-4e0c-a8b4-28bfaec3aeea", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 373, "fields": { "book": 28, "barcode": "2690ad93-85a3-4173-959c-303e9f6dcb70", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 374, "fields": { "book": 129, "barcode": "a755cf59-bbc6-4669-b970-cbae6c99ead4", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 375, "fields": { "book": 104, "barcode": "3632cc6e-ad84-44b5-ad4a-c2a293ae9196", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 376, "fields": { "book": 36, "barcode": "03feb118-afd8-4138-a915-17f49e9d5f13", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 377, "fields": { "book": 175, "barcode": "b5763291-3564-4b24-80c9-9f7947b9411b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 378, "fields": { "book": 38, "barcode": "4ec7e805-b8d1-49b7-add9-ae474762976b", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 379, "fields": { "book": 13, "barcode": "7b895329-8297-4a83-89ca-358a84b17a90", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 380, "fields": { "book": 29, "barcode": "09e3d13f-879b-4d6c-bd2d-04c704001299", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 381, "fields": { "book": 188, "barcode": "0720d82b-5af8-4215-9fa7-44e644738091", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 382, "fields": { "book": 107, "barcode": "0045b45a-fb74-4b35-8a41-5b0d4d075258", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 383, "fields": { "book": 104, "barcode": "5bbfb557-8069-4374-83dc-db2ece259def", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 384, "fields": { "book": 166, "barcode": "a3bc7ab1-d54e-4716-b6bd-0b360254c69b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 385, "fields": { "book": 30, "barcode": "86fe1faf-aa1d-4d93-90e5-704517da98f5", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 386, "fields": { "book": 13, "barcode": "f6843f13-5978-4aed-8a5c-e67d72a4f2e9", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 387, "fields": { "book": 12, "barcode": "9247fab5-1840-419a-96a0-21e6b6b3f02d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 388, "fields": { "book": 93, "barcode": "a2e38820-143b-4e92-8377-609d93e61a85", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 389, "fields": { "book": 186, "barcode": "fa1c5cac-0242-41b6-ab3a-5ba3ce543233", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 390, "fields": { "book": 58, "barcode": "ceeeec03-0d11-4b0b-8afc-55500b823cd7", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 391, "fields": { "book": 182, "barcode": "004cd145-1026-4fad-b8a2-062ef326847c", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 392, "fields": { "book": 179, "barcode": "4b6b3663-51b6-4706-b1ba-d94e036f6d95", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 393, "fields": { "book": 37, "barcode": "24cc2726-e91a-4351-aa8c-820916ac6b20", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 394, "fields": { "book": 160, "barcode": "c126b202-95fb-4010-b6d6-3184ab0a337a", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 395, "fields": { "book": 193, "barcode": "09da3d81-37ec-4796-8e46-e4cd23186ef7", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 396, "fields": { "book": 79, "barcode": "464b1c4c-5fbe-477a-b34c-c71a11228d7d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 397, "fields": { "book": 86, "barcode": "b1fe17ac-67ac-49ee-b5e2-7d3a662b7b32", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 398, "fields": { "book": 188, "barcode": "f2fe2540-d2dd-475e-8878-660fb71498e6", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 399, "fields": { "book": 152, "barcode": "604e6359-2c27-400b-a70a-0bc96a9eb8bf", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 400, "fields": { "book": 182, "barcode": "b1f9bbe3-0d50-4305-b1fb-dd3965a4433c", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 401, "fields": { "book": 131, "barcode": "c468a3ad-e452-46cb-9b31-9dc130be419a", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 402, "fields": { "book": 19, "barcode": "7a7342a6-cfde-47ac-9bde-7a5fb0f2702c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 403, "fields": { "book": 133, "barcode": "06131b16-9a5d-44d0-8400-721032935a85", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 404, "fields": { "book": 157, "barcode": "0cc3e1df-9ef5-43c3-b1ec-24fe6ea6fc90", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 405, "fields": { "book": 56, "barcode": "31a29a94-187b-4ee9-ab23-022788d1210f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 406, "fields": { "book": 142, "barcode": "d197879a-2866-44eb-a978-f3ea041dc8dc", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 407, "fields": { "book": 132, "barcode": "be98454a-f57a-4d3b-9fb1-363fb4addcce", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 408, "fields": { "book": 184, "barcode": "300550a5-2a4c-4a5a-b29d-2a36d2c1d7f3", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 409, "fields": { "book": 37, "barcode": "bea0fee2-e9d2-43c0-9e9b-093d852ed9ad", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 410, "fields": { "book": 178, "barcode": "283ac4b3-bf6f-46cc-87d5-ecf4e9184df4", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 411, "fields": { "book": 145, "barcode": "83d8a626-cfa2-4388-80e0-b8394c733b40", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 412, "fields": { "book": 63, "barcode": "d3726b97-8ad4-4489-a7ca-da3492da8ec4", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 413, "fields": { "book": 170, "barcode": "34585cda-b272-47f7-9c5e-7f75a2120b46", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 414, "fields": { "book": 161, "barcode": "a3072ad3-96ff-4c8e-bb47-410a5327ac7b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 415, "fields": { "book": 54, "barcode": "0023b913-e593-4ed5-8e2a-89e48e46d716", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 416, "fields": { "book": 179, "barcode": "ea22238a-653f-4dd8-b887-269911b5690e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 417, "fields": { "book": 10, "barcode": "ee210547-9cf8-46da-a4e3-3b153ffa210d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 418, "fields": { "book": 178, "barcode": "fd9b5171-b981-4a44-8862-bc6c2d1fb77a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 419, "fields": { "book": 66, "barcode": "4390ffa5-9fe4-4219-9f09-154c5831aa0d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 420, "fields": { "book": 40, "barcode": "a9e842ae-9034-4899-9830-1ca9a0a4fb10", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 421, "fields": { "book": 21, "barcode": "7b29c877-4789-405b-b8da-98e9564439bd", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 422, "fields": { "book": 61, "barcode": "3d26c800-5895-46cb-a132-985ff63b01d3", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 423, "fields": { "book": 161, "barcode": "f64c686f-dd7e-4e23-a384-dbe1dd9a152d", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 424, "fields": { "book": 132, "barcode": "3d64bafc-2da6-42ad-b7f7-0b8691369fa8", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 425, "fields": { "book": 194, "barcode": "ccffc317-a3c9-4270-9834-f5b1e5de1bc9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 426, "fields": { "book": 81, "barcode": "b53a9839-1919-48fb-b66f-5b90d0da5330", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 427, "fields": { "book": 174, "barcode": "9e59e407-57c2-46a3-a13b-7095dd12ffac", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 428, "fields": { "book": 5, "barcode": "5c1e6f20-dfb8-48e4-9274-6d758a628969", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 429, "fields": { "book": 125, "barcode": "b627f81d-b280-4b7e-9ee4-ffa8940be73d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 430, "fields": { "book": 17, "barcode": "ee9d00a6-586e-4d8d-a2f5-91c400f04ffe", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 431, "fields": { "book": 125, "barcode": "823898a3-69e8-4729-ae37-846b3a82e13d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 432, "fields": { "book": 18, "barcode": "b3e9ec8e-5349-4df3-83f9-faae02676dbc", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 433, "fields": { "book": 165, "barcode": "ab4056a8-aae0-40c1-b555-4251f0955e9b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 434, "fields": { "book": 166, "barcode": "978f9074-8e64-47b7-b5c4-d519411eaf73", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 435, "fields": { "book": 130, "barcode": "5fa5d016-e240-4c15-a621-8e7b12f4435f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 436, "fields": { "book": 157, "barcode": "3270084b-9ac4-4800-a3d7-a27353b5ed7a", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 437, "fields": { "book": 143, "barcode": "60ec2503-d510-4d6f-8fc6-2eb8bdbcad39", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 438, "fields": { "book": 150, "barcode": "bc8efcd2-c932-4e47-bd65-19a451719bf7", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 439, "fields": { "book": 34, "barcode": "d40b6fbd-d0ff-4131-b307-50f0f37b97b4", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 440, "fields": { "book": 75, "barcode": "50b84968-62a2-4d26-8146-a348b52aa0cc", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 441, "fields": { "book": 119, "barcode": "836a386b-14ae-4403-8f70-bf867c836919", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 442, "fields": { "book": 147, "barcode": "deb71d0a-e2dc-4a4d-86c6-4742e0e2d40c", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 443, "fields": { "book": 153, "barcode": "760cd3f4-36a4-41a5-b54a-a097991ca392", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 444, "fields": { "book": 31, "barcode": "8a9b7cc5-3b3b-492a-a3db-d526ba8e2d16", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 445, "fields": { "book": 199, "barcode": "ed5b79e4-857d-4849-849a-3eee8c11fc1c", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 446, "fields": { "book": 123, "barcode": "3c50aa27-a33d-4f07-9532-cdaab730b62b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 447, "fields": { "book": 180, "barcode": "236dc5e0-2710-4717-b763-2a128ecd40ca", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 448, "fields": { "book": 75, "barcode": "151a65a4-6696-4fd6-af9e-0104b177044b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 449, "fields": { "book": 126, "barcode": "a2e79b07-ca6e-41aa-a1c6-5cf573c898d2", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 450, "fields": { "book": 192, "barcode": "8dfa9f2c-7042-4aab-805d-0a7ddefb40ea", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 451, "fields": { "book": 40, "barcode": "f2474883-5f0a-4c63-a7a8-c67d57a1f309", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 452, "fields": { "book": 57, "barcode": "aafd5d12-fabd-4237-986d-97dc3ce118da", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 453, "fields": { "book": 154, "barcode": "a05c3317-0c20-4f60-8a1a-91438411a743", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 454, "fields": { "book": 102, "barcode": "07184107-2889-4a3b-8776-ff01ba80195d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 455, "fields": { "book": 49, "barcode": "028c5938-1525-4102-95d7-3053f3732c37", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 456, "fields": { "book": 32, "barcode": "55784426-4702-4d9d-abf8-ec9d7f5d7917", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 457, "fields": { "book": 188, "barcode": "f022d9c0-0309-49f6-a666-7006411260c5", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 458, "fields": { "book": 16, "barcode": "faa7ce45-417b-467d-bd55-685bdc81cb01", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 459, "fields": { "book": 92, "barcode": "c7af3dfe-f7b3-4a0d-b08d-a1ac134beb8d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 460, "fields": { "book": 56, "barcode": "4efd1d38-c758-4394-a893-58de63f64a7f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 461, "fields": { "book": 106, "barcode": "396a8570-4b1b-4823-952d-7ad3eca534b7", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 462, "fields": { "book": 124, "barcode": "a1b589b9-6851-466b-87f2-bc2c683c530f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 463, "fields": { "book": 31, "barcode": "b85c796d-ee38-4c4f-a6c7-22bbbc331bb9", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 464, "fields": { "book": 79, "barcode": "8c34a42e-95fd-4907-8450-eed6b6b4c873", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 465, "fields": { "book": 165, "barcode": "6e1eecf2-094c-4671-ad41-42f8e365ae4c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 466, "fields": { "book": 14, "barcode": "3c318c94-3f81-407a-9afd-1ddfa381ac96", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 467, "fields": { "book": 137, "barcode": "6161a1c1-6d5d-4592-8eda-bd470f76c1ed", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 468, "fields": { "book": 172, "barcode": "120e05fc-92df-4fc5-b716-0dd6a3c524b9", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 469, "fields": { "book": 31, "barcode": "96c9adcd-7ead-48d1-ae6f-e1a7019758f0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 470, "fields": { "book": 63, "barcode": "9e8b13e2-5554-4efc-b59e-6c54a189347b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 471, "fields": { "book": 32, "barcode": "80a03c63-5bc7-42f5-9c85-38aa6cac4597", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 472, "fields": { "book": 192, "barcode": "dbdc56c8-502d-456a-aef3-8279a43971a1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 473, "fields": { "book": 125, "barcode": "3d07b9bb-f10d-4e27-9f15-23408f767d4f", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 474, "fields": { "book": 118, "barcode": "2e3c08a5-2b94-40c1-9e9a-7ac249acb8c5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 475, "fields": { "book": 61, "barcode": "5cc29b84-a6b4-4380-af5b-2b9f7dc16822", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 476, "fields": { "book": 198, "barcode": "36e0e939-1b82-4fd1-9eb4-86db49f80ed9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 477, "fields": { "book": 77, "barcode": "0b4cb9d2-5d6a-4c43-bc3e-09e755c3a2ae", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 478, "fields": { "book": 158, "barcode": "a6beebee-1404-4107-9a7f-a0b183a771ca", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 479, "fields": { "book": 37, "barcode": "6c0364eb-d466-40cd-a2ce-c7367ecefe70", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 480, "fields": { "book": 167, "barcode": "36f61010-f65b-47d3-a324-1bb4c35e0482", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 481, "fields": { "book": 134, "barcode": "90da57f1-1748-4d94-8c65-6c29515ae773", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 482, "fields": { "book": 125, "barcode": "b1f621c7-df55-452b-9438-e57aa2373d6a", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 483, "fields": { "book": 114, "barcode": "67248b65-cef8-48a6-9b1b-c190c74a109b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 484, "fields": { "book": 160, "barcode": "cc4c3064-a50d-4c2a-8231-692d5b3cf374", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 485, "fields": { "book": 162, "barcode": "eb947235-40fe-4727-bae4-4abd5a044667", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 486, "fields": { "book": 93, "barcode": "341ab3d0-34ac-42ff-adb5-e0395ea662a5", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 487, "fields": { "book": 39, "barcode": "ac7a5006-e063-4f7f-bb0b-2b637dd7a39a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 488, "fields": { "book": 73, "barcode": "4754e912-2c0f-4ee2-9e3c-b9524cebbd8c", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 489, "fields": { "book": 3, "barcode": "2ce12077-d2ef-4015-adf3-f348968624a9", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 490, "fields": { "book": 26, "barcode": "24c9366d-139c-4a85-a760-a85db6a9685b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 491, "fields": { "book": 61, "barcode": "42a29fb0-994c-4d70-9c4a-e3c0f53c991c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 492, "fields": { "book": 99, "barcode": "87e7130a-e845-497f-9cb0-da71271f06f2", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 493, "fields": { "book": 143, "barcode": "fd526b90-a37b-4e0d-955c-702212c079d4", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 494, "fields": { "book": 174, "barcode": "8800d390-ce17-4f14-b41e-02b0d8163ae8", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 495, "fields": { "book": 39, "barcode": "819f09e3-2b1d-4df1-96fc-f75308d97582", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 496, "fields": { "book": 142, "barcode": "4a5b42b6-0660-4298-89c5-a64a43097828", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 497, "fields": { "book": 189, "barcode": "48cab83b-643d-4c89-9c2f-db1745fcdfb1", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 498, "fields": { "book": 159, "barcode": "70e175e3-1391-4514-bd9f-8ba8cb974880", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 499, "fields": { "book": 164, "barcode": "be12c873-09ca-48cc-81d4-8fe17feed085", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 500, "fields": { "book": 99, "barcode": "4a9cd9da-a399-43a5-8a0e-40ee935300f2", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 501, "fields": { "book": 79, "barcode": "908d6d18-6051-454d-aece-32fb3bae70b1", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 502, "fields": { "book": 126, "barcode": "431c3ee6-90d7-4190-b6b6-d64ef3119a8e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 503, "fields": { "book": 135, "barcode": "0c564b79-da2b-4e83-af15-301b5c7520e5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 504, "fields": { "book": 92, "barcode": "8887d6b0-ca7f-4643-9e30-6f51cae8de09", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 505, "fields": { "book": 69, "barcode": "f3b0f025-5999-43a4-bc65-a146c3fe8737", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 506, "fields": { "book": 194, "barcode": "830b456a-8f9c-492c-b72a-516b005af8f5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 507, "fields": { "book": 92, "barcode": "fb9792f8-789d-4ae6-8bc8-4a5c32161068", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 508, "fields": { "book": 37, "barcode": "dff7bbdb-be1a-42ec-9c8d-d617e605fec3", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 509, "fields": { "book": 133, "barcode": "88a6a084-b7f7-4b15-b41c-f55bca8d1b50", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 510, "fields": { "book": 151, "barcode": "85bf1c78-3e3d-402e-94aa-ccce36943a4d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 511, "fields": { "book": 71, "barcode": "49cedf5d-b0be-4acf-9e22-9e3f91993920", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 512, "fields": { "book": 1, "barcode": "350414b3-ac58-4608-bc02-c9d0bd31936e", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 513, "fields": { "book": 18, "barcode": "8024718e-85d6-4643-8943-1569b59e761c", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 514, "fields": { "book": 131, "barcode": "4a1e4c28-245f-4833-b9d2-d6ca1098964e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 515, "fields": { "book": 168, "barcode": "97a31c64-09f8-40e1-9a42-5a4b9b9266f9", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 516, "fields": { "book": 139, "barcode": "6063b5e1-4ff5-4f48-b661-38f881fc614b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 517, "fields": { "book": 42, "barcode": "5663181b-a567-4fe0-8ea8-03e01fe30f8d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 518, "fields": { "book": 188, "barcode": "6ef58a1f-d990-4b47-bc20-102403132d8f", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 519, "fields": { "book": 111, "barcode": "9e0abfff-b159-427e-9e70-c1ffc52fb5ab", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 520, "fields": { "book": 83, "barcode": "2bef1d87-668a-4d82-8207-2fb1cd14f6d6", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 521, "fields": { "book": 10, "barcode": "2dd91118-b84f-49f6-8e71-b6db7cc8b4ca", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 522, "fields": { "book": 170, "barcode": "d29acbe3-bc26-4750-a7a4-b1ec27c86b97", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 523, "fields": { "book": 78, "barcode": "a3a712ef-4380-4b37-8846-80201c6bd893", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 524, "fields": { "book": 120, "barcode": "2e5284b0-c69d-46e4-82d5-02cba495621c", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 525, "fields": { "book": 84, "barcode": "ef17d349-85d4-4694-935b-8dfbb7079224", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 526, "fields": { "book": 119, "barcode": "b4cd7a1d-ae8a-4c2f-b58b-d48f98620ab7", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 527, "fields": { "book": 125, "barcode": "b763520a-194e-42b5-b6c5-62e658d55290", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 528, "fields": { "book": 132, "barcode": "7dda0e54-f9f9-4603-ad97-4034b47fdebb", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 529, "fields": { "book": 1, "barcode": "6aaecb4c-d33d-478c-87b2-85cf13ae730d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 530, "fields": { "book": 169, "barcode": "8f6e5356-8846-4f42-b6ed-00b82bbac558", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 531, "fields": { "book": 196, "barcode": "c802f58e-291d-426d-8336-e53b1d8d7d28", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 532, "fields": { "book": 115, "barcode": "dce2b24f-96f5-4adc-ad4a-1699bd822c43", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 533, "fields": { "book": 136, "barcode": "cb828a82-9f7c-497d-9e3e-8f75861b6792", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 534, "fields": { "book": 69, "barcode": "66be0aad-0907-4a6c-a5bc-dc77b6f58545", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 535, "fields": { "book": 128, "barcode": "927118f7-fd9b-4342-8a6d-cbdc3f8394e9", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 536, "fields": { "book": 150, "barcode": "7509c928-9147-400d-b33f-c81460291ce0", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 537, "fields": { "book": 171, "barcode": "c09ed365-f74e-4e9e-8fb2-e271e8144f20", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 538, "fields": { "book": 25, "barcode": "fe470d56-fad2-4731-9977-1ec2ce538342", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 539, "fields": { "book": 95, "barcode": "fd048215-7b91-4d89-98ca-b26e926feef1", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 540, "fields": { "book": 183, "barcode": "29991c7a-4024-4fca-bed5-9cdbe3a2830a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 541, "fields": { "book": 31, "barcode": "5f26c4b9-6307-4d7e-bc11-a940b637e5d4", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 542, "fields": { "book": 148, "barcode": "49d62deb-117d-43ef-bc2b-3a9ffa220a7e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 543, "fields": { "book": 137, "barcode": "6a18b5f4-eec6-4736-a32a-5f1ae1f2845a", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 544, "fields": { "book": 17, "barcode": "cae8f7a0-21b9-4234-a668-dc62c1f42cb1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 545, "fields": { "book": 31, "barcode": "c32b4915-8679-465e-ad9e-9451bf8e9003", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 546, "fields": { "book": 78, "barcode": "c2343180-0274-4b01-83ad-00d8c0875df2", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 547, "fields": { "book": 117, "barcode": "313c28b9-8669-4ba3-aed7-81e094e6599f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 548, "fields": { "book": 168, "barcode": "0ea962d4-3f53-433a-9343-61d1af0752ba", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 549, "fields": { "book": 60, "barcode": "3cc10ea0-9cfd-4e31-8c39-09d3c8ac185d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 550, "fields": { "book": 133, "barcode": "46326dcb-54ed-4c30-b40a-f5fb7240cc38", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 551, "fields": { "book": 125, "barcode": "654a18c8-6702-443b-ae59-659ad34bbd85", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 552, "fields": { "book": 99, "barcode": "da243ae4-8bb1-43cd-9233-0a4974566131", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 553, "fields": { "book": 186, "barcode": "03b9aca4-38c4-412d-9701-cfe028391430", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 554, "fields": { "book": 122, "barcode": "d8d11b7b-f782-4bc2-99a1-5c403deb8abb", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 555, "fields": { "book": 5, "barcode": "4ba1f655-d3d0-46f7-9ec1-12f7c71c407d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 556, "fields": { "book": 135, "barcode": "aee2cf1c-bedb-4c94-990f-368eaff688a8", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 557, "fields": { "book": 3, "barcode": "cec10cf0-f996-4783-b8e9-8f0f5fc6d5ee", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 558, "fields": { "book": 49, "barcode": "e7007255-c8ac-44cd-95cb-4fd277e394d5", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 559, "fields": { "book": 50, "barcode": "37b5f3db-86b6-45ce-b25d-12ea21ddc9e9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 560, "fields": { "book": 170, "barcode": "8b6d4884-4ea5-43f8-85c1-196ef4da2437", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 561, "fields": { "book": 195, "barcode": "7771a37a-cd47-4279-b7c0-807e105b17b5", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 562, "fields": { "book": 159, "barcode": "3849c562-7a65-4272-b811-671bb292d510", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 563, "fields": { "book": 110, "barcode": "9b2608cd-56e9-49d1-9107-8a69cef71153", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 564, "fields": { "book": 164, "barcode": "c4d44fad-c695-419b-9b84-18f9c466d5b5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 565, "fields": { "book": 182, "barcode": "b4f9f4df-710b-4ef4-9635-da347f64631c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 566, "fields": { "book": 147, "barcode": "39b9c4ff-b12e-4b1d-b536-66eb1fab30c9", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 567, "fields": { "book": 63, "barcode": "b2cd7884-722c-47ad-97ae-fe42cef1d18c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 568, "fields": { "book": 88, "barcode": "66abee12-212d-4bf8-b6cb-c904106e52b9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 569, "fields": { "book": 117, "barcode": "7873ca44-97ec-4333-8907-4a73ce03342b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 570, "fields": { "book": 110, "barcode": "b9f0c423-cb22-4082-9719-3f770667c718", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 571, "fields": { "book": 1, "barcode": "6bdbd975-4e45-4b90-8fb9-b14912f2a798", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 572, "fields": { "book": 147, "barcode": "01ad2697-a913-46c8-beae-a5fb4404f3cc", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 573, "fields": { "book": 128, "barcode": "f9cbc03e-9229-4bed-bf13-369d1e6d0658", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 574, "fields": { "book": 174, "barcode": "ffe532f7-9c63-41b3-a2db-667ef3235cca", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 575, "fields": { "book": 64, "barcode": "69d1ec35-d78d-4b07-86fe-96c3329b9004", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 576, "fields": { "book": 83, "barcode": "e253062c-4956-45fa-8db9-ae3eaca0a827", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 577, "fields": { "book": 73, "barcode": "4665e438-6b86-487a-9b48-2e0215bf67ab", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 578, "fields": { "book": 144, "barcode": "d52e881b-f5db-45e4-b536-18f70850bdab", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 579, "fields": { "book": 131, "barcode": "253144c8-6ce3-4163-8ebd-1229f5559171", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 580, "fields": { "book": 22, "barcode": "94ae302f-7147-4506-b57f-9a3ccda0d3e8", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 581, "fields": { "book": 44, "barcode": "801cdcd4-522a-4dc5-833a-4e0c43c0117d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 582, "fields": { "book": 196, "barcode": "84165164-a214-4efd-acd7-bde6eef71f64", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 583, "fields": { "book": 143, "barcode": "e18cc52d-b15c-406f-9e29-cec677e78a90", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 584, "fields": { "book": 2, "barcode": "4bc96998-b188-47d5-a18b-b73c580d34a3", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 585, "fields": { "book": 62, "barcode": "7af98b9c-6fa1-433c-9ef9-055fdda35511", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 586, "fields": { "book": 178, "barcode": "29dc3276-7577-45a5-9a1b-ba2d13aa4a4b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 587, "fields": { "book": 95, "barcode": "57d274bd-4446-4891-b1ef-305fed207a10", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 588, "fields": { "book": 125, "barcode": "176f2a3a-a234-4744-a4be-90ac14ae47e8", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 589, "fields": { "book": 97, "barcode": "0834afcd-0e92-46e7-8fba-8f6aa08e1fc2", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 590, "fields": { "book": 71, "barcode": "8eb38827-4773-4d82-9fce-e1a112f78244", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 591, "fields": { "book": 28, "barcode": "f186a719-9ace-4d97-8e9b-38fd1e468023", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 592, "fields": { "book": 126, "barcode": "b997fab8-ef4d-4987-a2fa-dcd4e5c090a3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 593, "fields": { "book": 91, "barcode": "1bfadac2-18b6-428b-8cc1-74fa569e8c22", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 594, "fields": { "book": 100, "barcode": "71e9ff46-30b9-4d5e-a1b5-3f2a7fecef81", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 595, "fields": { "book": 22, "barcode": "17d04763-0ca9-4458-9b0a-8918ae8d441b", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 596, "fields": { "book": 99, "barcode": "e530ed06-b3b1-4500-ac07-2422515b8dd3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 597, "fields": { "book": 46, "barcode": "df0b3534-5808-44f2-8bb2-f41f344ea6c8", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 598, "fields": { "book": 163, "barcode": "97ba094e-6f04-4756-b7c2-c9ffb689cf39", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 599, "fields": { "book": 11, "barcode": "a37bca86-cfeb-445e-8e39-20b30ba4997b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 600, "fields": { "book": 82, "barcode": "5ceddc8b-4490-4a0f-b21a-c9c9d84050c4", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 601, "fields": { "book": 53, "barcode": "057436b3-7ed6-4fc6-9048-710660e62a1e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 602, "fields": { "book": 130, "barcode": "9febcec7-0d8f-4c7a-89d6-518105f65137", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 603, "fields": { "book": 12, "barcode": "db3e8dda-47c0-4b12-a281-4a5ca1ccc6ad", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 604, "fields": { "book": 120, "barcode": "d5cfc58f-8c8b-4c38-beca-4091a9ee33c0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 605, "fields": { "book": 126, "barcode": "fa0f54ca-8ae2-4fcd-a0c6-45d548357f50", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 606, "fields": { "book": 25, "barcode": "e9c720eb-f4fe-4915-8ed9-11b1857e6f68", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 607, "fields": { "book": 179, "barcode": "c4e1a49f-a640-46df-bd3d-6ec21d8624c1", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 608, "fields": { "book": 120, "barcode": "380abdea-ee3e-468a-bed2-9d55c782e08c", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 609, "fields": { "book": 80, "barcode": "71dd91ea-18a0-4291-8a85-3b9f8bca874d", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 610, "fields": { "book": 162, "barcode": "8b87aee4-05d4-4426-9868-faa94a6811a0", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 611, "fields": { "book": 132, "barcode": "2ac1e9e4-3532-4535-be8a-87338e9867ad", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 612, "fields": { "book": 100, "barcode": "00234a2c-0c16-4513-aa38-a6d430e64a04", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 613, "fields": { "book": 136, "barcode": "63ee602d-4f29-4be4-8079-fa6011973a42", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 614, "fields": { "book": 63, "barcode": "d137e31c-fcee-4b2f-a2ea-cac799c7138c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 615, "fields": { "book": 17, "barcode": "22eee372-4cc0-4153-ba90-272fca31ca04", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 616, "fields": { "book": 13, "barcode": "5d9f2553-21ad-4370-80e6-162cc1f52766", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 617, "fields": { "book": 86, "barcode": "385a7414-7688-46cf-bc84-21d34f88ea84", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 618, "fields": { "book": 132, "barcode": "5fb24be0-6797-4d2d-83fd-315a0ba52865", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 619, "fields": { "book": 1, "barcode": "430655f8-5f70-4abe-9127-f158967bd11f", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 620, "fields": { "book": 87, "barcode": "31569f01-1b42-41c3-8dcc-9d5a58a526b3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 621, "fields": { "book": 3, "barcode": "d4b5d529-77d3-4318-8e82-a94648a3252a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 622, "fields": { "book": 132, "barcode": "69c71d19-dae3-4c0c-bf0a-58808ac98dea", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 623, "fields": { "book": 141, "barcode": "73471e70-135d-45d1-9b86-424b88dfafd8", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 624, "fields": { "book": 66, "barcode": "3166b7e2-f44f-48ae-9dd5-d6e8a133b90d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 625, "fields": { "book": 9, "barcode": "40647a30-943b-45d1-bdc7-fc23f03ea6b4", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 626, "fields": { "book": 147, "barcode": "0ff9c800-4fa1-4c48-9c7e-c9abb42d9b69", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 627, "fields": { "book": 63, "barcode": "7e08f5d0-e5e8-41db-8a70-9024316f0129", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 628, "fields": { "book": 144, "barcode": "8bdb51ac-a5fd-4899-814d-41568d0ab4a4", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 629, "fields": { "book": 148, "barcode": "fe2713d6-d2c8-4624-9845-7fab06c795c5", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 630, "fields": { "book": 42, "barcode": "dd20e860-9ce8-427a-b580-7cbf16ac1131", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 631, "fields": { "book": 171, "barcode": "3233a5cc-e7c7-452b-8e19-9c7d105f6a42", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 632, "fields": { "book": 52, "barcode": "b22bab24-7b33-43fb-804c-c6541eaaa087", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 633, "fields": { "book": 174, "barcode": "a1a42207-a379-41a7-9699-478b2449987d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 634, "fields": { "book": 60, "barcode": "0098c407-2c82-4200-ba73-2140e7715fa1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 635, "fields": { "book": 78, "barcode": "846453f7-982c-4491-8d97-455d5dd68114", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 636, "fields": { "book": 194, "barcode": "67d42b99-ee09-4a4e-93ed-0fdb452b261f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 637, "fields": { "book": 80, "barcode": "6e309219-c39e-4b6e-ae31-86a43d407b83", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 638, "fields": { "book": 116, "barcode": "5a76fd95-19b5-4f12-9745-deaebd19b4ba", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 639, "fields": { "book": 182, "barcode": "d9e6d870-d5ab-4c54-aa83-b7876d21e105", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 640, "fields": { "book": 81, "barcode": "8029b98e-a54a-46a5-b85c-3eda6cdd63af", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 641, "fields": { "book": 181, "barcode": "d51ec313-2123-4b7b-bec6-ccef2f79b074", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 642, "fields": { "book": 150, "barcode": "f2670e59-501e-4f2c-8adc-6cc9fc7895c8", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 643, "fields": { "book": 114, "barcode": "64c17972-1c18-42aa-9051-ce60d930ea6f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 644, "fields": { "book": 62, "barcode": "880d0d4a-6516-4e17-9f78-bd6a342270b8", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 645, "fields": { "book": 158, "barcode": "93594091-c32d-438d-acd5-46f1bd4e703e", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 646, "fields": { "book": 163, "barcode": "32d49af6-87d5-4596-9e9c-f34548e93b9a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 647, "fields": { "book": 133, "barcode": "9759b063-cb69-4f29-a710-8a1318af7991", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 648, "fields": { "book": 115, "barcode": "80cfb5e5-aae8-40a4-b607-0792f8ef734b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 649, "fields": { "book": 32, "barcode": "3d10dc9a-db23-4121-81dd-8f3fa5a7bea9", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 650, "fields": { "book": 169, "barcode": "07c2096c-2577-4dc4-8df6-4b0b7b1f85b0", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 651, "fields": { "book": 177, "barcode": "389358a9-4a24-4d05-b39a-aabbca0d67ec", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 652, "fields": { "book": 119, "barcode": "aea01df7-c264-4f84-ad5c-be6d0182df76", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 653, "fields": { "book": 150, "barcode": "50ef5b49-d495-471f-b77a-5be6f1ab2195", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 654, "fields": { "book": 181, "barcode": "64a839ec-537b-4bd0-af4a-8a6697935156", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 655, "fields": { "book": 178, "barcode": "83da90a7-4913-468e-91d3-bd279344c085", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 656, "fields": { "book": 26, "barcode": "09ae999b-fb46-49dc-a9e8-2cf206870c1e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 657, "fields": { "book": 29, "barcode": "b89649b7-844d-4cd5-823c-65291ce9f5fb", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 658, "fields": { "book": 35, "barcode": "76474238-4929-4732-b550-8158ec7bdeaf", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 659, "fields": { "book": 185, "barcode": "69966c8c-1780-4c07-ae0d-fffd7f4f4475", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 660, "fields": { "book": 151, "barcode": "0c1a86e2-6efa-4b8b-88d8-ee6cea2e75ec", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 661, "fields": { "book": 54, "barcode": "af89379f-cdc4-41c5-a401-c518b37e5f71", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 662, "fields": { "book": 174, "barcode": "585e325c-69b1-4b57-9cdc-25b0985dbb07", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 663, "fields": { "book": 129, "barcode": "c2df3e6f-2401-4b74-8e21-8e281808fa2d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 664, "fields": { "book": 123, "barcode": "c87869b3-644c-4ef5-a827-6664b43d7765", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 665, "fields": { "book": 169, "barcode": "21ad0636-afc3-4e38-b939-a7c50da773e4", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 666, "fields": { "book": 47, "barcode": "7a98db31-4c1c-40d8-9828-6783b940e133", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 667, "fields": { "book": 156, "barcode": "ccca3122-ba84-4d32-89d8-2e193618c245", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 668, "fields": { "book": 171, "barcode": "39df47d0-b614-4919-a070-156eec79fbe9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 669, "fields": { "book": 190, "barcode": "40d13287-1cca-4672-b21d-74ff1f0031e8", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 670, "fields": { "book": 105, "barcode": "c9c8ef1e-7427-476b-8267-847a1f946d20", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 671, "fields": { "book": 195, "barcode": "9ab5c14b-226a-47ab-90fd-400bacb32717", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 672, "fields": { "book": 52, "barcode": "15aa5270-7fc4-48d9-aa9d-cbf168c80854", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 673, "fields": { "book": 73, "barcode": "00c34cae-c9ad-4beb-90bf-2905c8612af7", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 674, "fields": { "book": 163, "barcode": "0edcd926-f6a8-4119-bca4-2a04fa425a54", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 675, "fields": { "book": 79, "barcode": "1be383c5-8e5c-4e15-bf50-ca55ec088b53", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 676, "fields": { "book": 62, "barcode": "425b90bd-2a09-422c-a2a8-b1bf08265811", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 677, "fields": { "book": 139, "barcode": "0cbc8b26-4bfd-4d4f-a82f-6abe80bfdb7e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 678, "fields": { "book": 137, "barcode": "9b1f1ddf-772a-4f61-97ae-f6ff8c4ad1c0", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 679, "fields": { "book": 133, "barcode": "6ccffaf9-6c00-4d7d-b567-b696d472b179", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 680, "fields": { "book": 2, "barcode": "a2f1f245-7db6-4e4a-819c-d970e3c4a064", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 681, "fields": { "book": 8, "barcode": "0b9891a9-17fc-4610-8eca-a4545630479f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 682, "fields": { "book": 197, "barcode": "7e957547-8871-424e-84fc-c502fba66f5f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 683, "fields": { "book": 127, "barcode": "c9a32d64-77c9-4b78-9e9f-f570a64ab19b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 684, "fields": { "book": 75, "barcode": "27ad2240-51cf-4207-9cd7-bba461ad2c1b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 685, "fields": { "book": 56, "barcode": "eda1e14f-3fe3-460a-ad1c-471c8268efd1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 686, "fields": { "book": 4, "barcode": "752836af-4b5d-4ff2-b2c9-e561f4c288a9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 687, "fields": { "book": 123, "barcode": "ca515fac-bee8-4e06-b5ba-d2cd3655f2c1", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 688, "fields": { "book": 7, "barcode": "e4d5b5d1-579d-43e0-bbe7-01cf290d9f22", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 689, "fields": { "book": 146, "barcode": "d3abd2e7-efdd-4a4c-a1ea-8e9e27691c95", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 690, "fields": { "book": 44, "barcode": "dd10f016-18bb-4490-88ea-bf51ec7f0c31", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 691, "fields": { "book": 148, "barcode": "ba68811e-0bdb-4cff-8bc6-4fdd6aaa0894", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 692, "fields": { "book": 28, "barcode": "aa5aa358-4281-4e09-b9ca-7f941b66e12c", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 693, "fields": { "book": 49, "barcode": "e3d8383b-1124-4ef9-a841-72d5930c483f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 694, "fields": { "book": 188, "barcode": "1cb9c8ca-eb87-4eeb-a5fe-50789bdf17b3", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 695, "fields": { "book": 152, "barcode": "21456015-3986-48b9-8edd-32672a8ec922", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 696, "fields": { "book": 42, "barcode": "bcd6c37b-7d28-4b70-ba1d-0c3e01b56277", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 697, "fields": { "book": 59, "barcode": "491e6fcb-8b74-47ee-97e3-a8bfaa411b2e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 698, "fields": { "book": 87, "barcode": "1e7ae568-1b14-41f2-86c9-5c4d141ff292", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 699, "fields": { "book": 78, "barcode": "11ca0d3c-8e34-4358-9fc6-805a329eeb22", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 700, "fields": { "book": 34, "barcode": "fb3e840b-d3b1-4c39-848a-cda06b9906e4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 701, "fields": { "book": 143, "barcode": "22da4fba-cd53-4ca2-8500-f3faa76a3da4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 702, "fields": { "book": 150, "barcode": "021bdf13-f5ad-4f71-8f41-a01e75fd7f61", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 703, "fields": { "book": 95, "barcode": "2b8d01cf-9595-45e5-8d07-15bf36b84da3", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 704, "fields": { "book": 165, "barcode": "af1420a7-c386-4310-b59b-c9b56fc9ae7f", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 705, "fields": { "book": 3, "barcode": "7ca64128-bf16-475c-8271-3c419c26bd59", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 706, "fields": { "book": 146, "barcode": "c0051da6-0e09-4b01-b4fe-9ea1cdbf916d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 707, "fields": { "book": 147, "barcode": "2a9f25e0-5cc4-4502-941b-f85c9b16d7c4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 708, "fields": { "book": 104, "barcode": "a85b76d1-ace7-4d13-b230-0f5a7abb0d4e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 709, "fields": { "book": 196, "barcode": "de0fadfc-bd7e-48e2-aa77-06ef2f237c88", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 710, "fields": { "book": 199, "barcode": "24d520d3-1a17-4963-83f4-876f5a5a7cf2", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 711, "fields": { "book": 115, "barcode": "41eeb1e4-d0e8-4ccd-b19f-b3e914b3a585", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 712, "fields": { "book": 45, "barcode": "41946bf1-a2d6-458c-8bf5-1abc0d78fe75", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 713, "fields": { "book": 89, "barcode": "0a18c462-f46d-4715-bab8-94431a2e884b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 714, "fields": { "book": 36, "barcode": "bb3ee161-0b0b-420f-9e4a-9141921eebc0", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 715, "fields": { "book": 31, "barcode": "2526f77d-45ae-4d85-bd1e-a46fdfe269a2", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 716, "fields": { "book": 37, "barcode": "331082be-7b6c-455f-b334-cc42ea704e5b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 717, "fields": { "book": 19, "barcode": "c127e8da-a6e8-4318-9714-62ee7349a869", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 718, "fields": { "book": 105, "barcode": "aafe8b26-9953-47f7-8b37-f2228a35759e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 719, "fields": { "book": 35, "barcode": "683b0ac1-7ec4-4080-ae5c-c7a12f2535fc", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 720, "fields": { "book": 143, "barcode": "fd6e5aed-753b-4c4b-a2d3-723c8bad2268", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 721, "fields": { "book": 77, "barcode": "c8444f70-294d-4809-bad5-6c12bc7d4fea", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 722, "fields": { "book": 125, "barcode": "9c7aa00c-1ffa-4e8c-a689-4a2e8f70aeee", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 723, "fields": { "book": 29, "barcode": "15bae5ed-507e-4980-aa4a-2e93f65f1fdd", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 724, "fields": { "book": 105, "barcode": "97d7fd54-565e-46bb-9321-f22f2438b114", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 725, "fields": { "book": 181, "barcode": "17094e7e-e6d0-4466-b84c-5ef08348bfb8", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 726, "fields": { "book": 176, "barcode": "0cd40613-dcea-4223-88db-fa061ee3b2fb", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 727, "fields": { "book": 76, "barcode": "f6b5aa3f-79fc-4636-b7b3-59a9c06ea164", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 728, "fields": { "book": 102, "barcode": "579c2280-7d26-45d3-b930-0cd39218ae78", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 729, "fields": { "book": 71, "barcode": "89000414-2d98-44cb-9961-bc1232ce35da", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 730, "fields": { "book": 122, "barcode": "1ce167bd-7d80-48c7-b5ad-c95e759cdc88", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 731, "fields": { "book": 61, "barcode": "0bd11503-ce84-439d-b972-796651143180", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 732, "fields": { "book": 129, "barcode": "60a2e98e-0777-441a-9e60-5b1f4828b125", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 733, "fields": { "book": 97, "barcode": "8572d835-0d08-49b3-aa1e-985605ab9c8e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 734, "fields": { "book": 75, "barcode": "de294799-22ea-471f-90e1-a3b94ff37f11", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 735, "fields": { "book": 11, "barcode": "f349e3fa-53c2-477a-99f5-37ca96ed1cd7", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 736, "fields": { "book": 156, "barcode": "b7d66dfb-6f2e-4691-8176-761aa5abe935", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 737, "fields": { "book": 171, "barcode": "7948c07e-400a-4d96-b267-d13a7ff62d08", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 738, "fields": { "book": 113, "barcode": "f2b62f7b-eb66-4bf9-8872-89738218c922", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 739, "fields": { "book": 61, "barcode": "0992ab64-31c1-43af-8061-47c3e9f76a02", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 740, "fields": { "book": 146, "barcode": "e4f982c2-574d-4416-9143-bdf60ff24d68", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 741, "fields": { "book": 121, "barcode": "9aa9009f-262a-43b3-b45b-d3cbf6c8edac", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 742, "fields": { "book": 16, "barcode": "8a7fe42d-6f6c-4c41-bd14-a3bed73692e5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 743, "fields": { "book": 3, "barcode": "d8c352f5-7246-49c9-ba12-8b1925162d99", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 744, "fields": { "book": 72, "barcode": "dd107f70-0e63-44e6-8dec-83420eb8d31a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 745, "fields": { "book": 117, "barcode": "1365e34e-c5a8-4f9b-9290-d42a5be937bd", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 746, "fields": { "book": 116, "barcode": "2aef22c8-cb15-4b69-a8b3-96115c06c6d8", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 747, "fields": { "book": 40, "barcode": "3f68e914-30c5-45fc-a8ed-3953e3b7388b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 748, "fields": { "book": 18, "barcode": "7033df94-7618-44ac-94ff-a2fe35464f74", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 749, "fields": { "book": 3, "barcode": "311f54fc-7368-4cde-9c68-0c4fa0cade7d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 750, "fields": { "book": 132, "barcode": "e9911fe4-d056-41aa-86f4-85177aca3446", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 751, "fields": { "book": 196, "barcode": "3c1e50d6-d3d4-4f3f-ac16-8b49ec9828de", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 752, "fields": { "book": 37, "barcode": "5f68ef4b-8cba-4392-84f3-7df4d6615033", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 753, "fields": { "book": 13, "barcode": "a481cdb4-ff3d-4555-9aab-b58bc41d24f1", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 754, "fields": { "book": 84, "barcode": "3e70187a-b66e-4e86-b469-6f9c4607fd43", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 755, "fields": { "book": 172, "barcode": "0bf576bc-f6c1-4a37-83cf-506aea293965", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 756, "fields": { "book": 195, "barcode": "d09fab71-191d-4daa-87ae-8045e090587f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 757, "fields": { "book": 99, "barcode": "5f8b1b29-7787-43b9-8010-88d82bc335c4", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 758, "fields": { "book": 197, "barcode": "367b9d23-6385-481e-a7c9-b3a1850c5c8b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 759, "fields": { "book": 139, "barcode": "6c7146d0-2021-4c57-af4a-dff1f32e762e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 760, "fields": { "book": 120, "barcode": "46de3e57-c799-46a0-a7f6-b85f74559981", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 761, "fields": { "book": 179, "barcode": "e7c55d91-5235-44cd-be69-917685b30e0b", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 762, "fields": { "book": 83, "barcode": "d58a38ba-18fd-4e7d-ad3e-64eb3ef24e7e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 763, "fields": { "book": 168, "barcode": "daa988ef-5bcc-4640-8f31-c02b592fb18a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 764, "fields": { "book": 198, "barcode": "da773874-8e40-4199-8102-1026b051af72", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 765, "fields": { "book": 135, "barcode": "0fdfbe31-250b-46e9-a094-c4c2fd883a0a", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 766, "fields": { "book": 128, "barcode": "b93b19b1-14dd-4133-accf-62950f203fc0", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 767, "fields": { "book": 25, "barcode": "21e4bb11-65d8-4bec-a142-8c7e8507819f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 768, "fields": { "book": 196, "barcode": "ea717d4f-5f58-450f-a7c4-17fa2b27dc2d", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 769, "fields": { "book": 144, "barcode": "5cd5a209-e23d-4d87-909e-ee331d8c2d4e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 770, "fields": { "book": 148, "barcode": "058db9c1-4b0e-4553-a6ea-e190316cea8f", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 771, "fields": { "book": 38, "barcode": "12dfdfce-25b7-435a-93a2-b978ac7d85b0", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 772, "fields": { "book": 94, "barcode": "b5dd9c61-b3ab-4b34-8772-9fada30ae9ce", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 773, "fields": { "book": 63, "barcode": "c7f66257-3b80-453d-a5d4-04f0a17f9737", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 774, "fields": { "book": 43, "barcode": "b803b2cf-ebff-4428-9837-3963fe7813d5", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 775, "fields": { "book": 194, "barcode": "86a26a4d-f093-4f4f-bc3c-ba38416c8407", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 776, "fields": { "book": 135, "barcode": "b05cc99f-b66c-46af-a7d0-c0b6a86f8305", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 777, "fields": { "book": 98, "barcode": "67b55066-ba47-4a9d-a07d-88fd0304ee8e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 778, "fields": { "book": 54, "barcode": "1d0f7154-75cb-4e60-b0c9-d676e24ed4d1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 779, "fields": { "book": 194, "barcode": "1a69a5e9-67b8-46a0-b223-cb960ce16086", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 780, "fields": { "book": 156, "barcode": "6fc40e5c-d977-4af3-9438-f8929ea4d50c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 781, "fields": { "book": 31, "barcode": "ad04a3a1-c2ef-44f5-b8fc-7df23f6551b5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 782, "fields": { "book": 60, "barcode": "787b6ad7-841b-43a3-ba71-61a1a46933c0", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 783, "fields": { "book": 177, "barcode": "80c0eb5b-0b1b-4745-b69c-2bd27c656e24", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 784, "fields": { "book": 186, "barcode": "af4b4511-f019-4b60-8b6d-670364afc46f", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 785, "fields": { "book": 89, "barcode": "99ecafe7-de9c-4e4e-b0e4-ebdcab8ab125", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 786, "fields": { "book": 36, "barcode": "27b5c266-4e8d-40a6-9f52-c09c50111596", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 787, "fields": { "book": 50, "barcode": "f6bfc6a4-16c3-4b8a-8dec-4db96706d301", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 788, "fields": { "book": 32, "barcode": "643a5b74-089e-438d-9974-2732dc9229f1", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 789, "fields": { "book": 109, "barcode": "3775d587-aa0e-4238-873b-947aede33ad4", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 790, "fields": { "book": 192, "barcode": "2f840bd0-2bfd-4e0c-96d2-0dd226b2b4a6", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 791, "fields": { "book": 196, "barcode": "0b503525-d35a-4a77-a21d-19bc9102faf0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 792, "fields": { "book": 185, "barcode": "628c2fd8-0cdc-4025-a042-e343cb6fae77", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 793, "fields": { "book": 2, "barcode": "9d0ab49c-aead-45d4-ba39-aa6188e3df54", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 794, "fields": { "book": 93, "barcode": "eff668bf-cde6-4ef3-a528-1858a6c614f7", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 795, "fields": { "book": 119, "barcode": "50e83da7-e732-4803-bbee-c07540e66194", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 796, "fields": { "book": 57, "barcode": "bde9f4f9-2756-44da-92a3-e5343c930891", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 797, "fields": { "book": 87, "barcode": "d85fa794-7a1f-4d14-ae35-07d974868eb0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 798, "fields": { "book": 91, "barcode": "a259604e-3eee-4e84-ba78-ba04e0d1c3f1", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 799, "fields": { "book": 105, "barcode": "3195ef12-4b57-4930-8f57-d25d7be75586", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 800, "fields": { "book": 148, "barcode": "ee7b2aef-b3ce-4cf2-9cb0-b725183cfc26", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 801, "fields": { "book": 60, "barcode": "ee54637f-472d-44c1-8b41-0b466808dd4e", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 802, "fields": { "book": 20, "barcode": "ae09941a-36ca-4bf1-b8e1-50c842d8419d", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 803, "fields": { "book": 137, "barcode": "9582b3c8-d569-4630-b2fa-266b402e7039", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 804, "fields": { "book": 62, "barcode": "d686dd66-b8fc-420a-a50b-356d85dd7a03", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 805, "fields": { "book": 46, "barcode": "838498d5-132f-4b1c-bc5c-1f8e1d8c6463", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 806, "fields": { "book": 28, "barcode": "4b39beb2-245b-46a7-84d3-3782d4b5ac7e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 807, "fields": { "book": 52, "barcode": "0a6eb2a8-26c9-442a-b81a-fa0ad01fefb1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 808, "fields": { "book": 106, "barcode": "40d916bf-5005-49b3-a081-0e1c784bb88f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 809, "fields": { "book": 181, "barcode": "8628f1c3-ea72-4538-9acc-94735ce881ec", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 810, "fields": { "book": 155, "barcode": "783879fd-4fb7-4293-b115-b3ab03320910", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 811, "fields": { "book": 6, "barcode": "a21b2ee5-aa95-459b-a63e-f8b43754e282", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 812, "fields": { "book": 134, "barcode": "d3e0d6d5-86ca-49f6-89f1-32773f25c7a0", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 813, "fields": { "book": 20, "barcode": "d489d448-4d97-4533-8769-6e29a9264ff0", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 814, "fields": { "book": 41, "barcode": "5d1f7a2a-1ed8-4f2e-abe9-190137de874f", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 815, "fields": { "book": 62, "barcode": "2068c862-10bb-4495-8970-d99bb0d8dd73", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 816, "fields": { "book": 33, "barcode": "e5141744-530b-46db-b43e-5e04483556e1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 817, "fields": { "book": 10, "barcode": "33b078bb-4ed9-44f1-898f-09968aa605bc", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 818, "fields": { "book": 106, "barcode": "534cbd14-3270-4e7e-b66c-de0912a69451", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 819, "fields": { "book": 157, "barcode": "82979e80-21de-48d7-ac26-3472c4c0f4ef", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 820, "fields": { "book": 182, "barcode": "4ec0e7fc-aefc-469c-86b1-2225c2bf4524", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 821, "fields": { "book": 149, "barcode": "338615d1-e4b7-4b25-be2b-609a75695b7c", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 822, "fields": { "book": 178, "barcode": "0720f985-6b51-45c4-876a-2a3bb7863a09", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 823, "fields": { "book": 128, "barcode": "01f56300-4e9e-484e-9798-394c8defe951", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 824, "fields": { "book": 154, "barcode": "75bdc95e-3018-4d40-9ec7-cce80ffbf815", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 825, "fields": { "book": 184, "barcode": "c91e5513-9586-4b20-9d19-3fd4bf159b58", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 826, "fields": { "book": 177, "barcode": "d0333e39-5af0-40fb-899c-9cda33ad3ff7", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 827, "fields": { "book": 79, "barcode": "bae91e28-0537-4942-ab03-c5f3e90d45ce", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 828, "fields": { "book": 13, "barcode": "42859d11-8a32-47e2-bb95-88122d387340", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 829, "fields": { "book": 126, "barcode": "f923023c-2a61-4152-b0dd-108cde4c9d38", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 830, "fields": { "book": 2, "barcode": "53852ba8-6bb4-4578-9b09-c0ed10375cb1", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 831, "fields": { "book": 74, "barcode": "74e3d1e7-e393-4bcd-a13e-058757356a32", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 832, "fields": { "book": 74, "barcode": "bb155ff7-5f01-4c21-bb62-7252337cdf7a", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 833, "fields": { "book": 139, "barcode": "e9424649-a876-489e-8325-09ca4963ce5c", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 834, "fields": { "book": 102, "barcode": "69ac10a0-e10a-40dd-b61e-2978db0244ed", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 835, "fields": { "book": 158, "barcode": "782dd9b9-8f74-4f5d-b43a-b6df72964cd1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 836, "fields": { "book": 72, "barcode": "82458635-663e-43e6-bac6-5b8a5e1a3acd", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 837, "fields": { "book": 170, "barcode": "e736fd3b-8185-467f-9a38-ec620b4ea7f3", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 838, "fields": { "book": 70, "barcode": "f45de8cc-a260-4935-8fc6-8d1ddf676065", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 839, "fields": { "book": 160, "barcode": "00291173-2906-42de-85c2-ecd75850be95", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 840, "fields": { "book": 40, "barcode": "259f03a9-cf07-4a19-ae92-ab5daa9c54fa", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 841, "fields": { "book": 148, "barcode": "0c09be6c-4f96-4dc9-b802-174efb8710de", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 842, "fields": { "book": 3, "barcode": "844b4fb6-78aa-420c-b11d-1159981d1647", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 843, "fields": { "book": 69, "barcode": "10150a95-7b1e-4b2d-beb2-78d790b7d030", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 844, "fields": { "book": 93, "barcode": "8b751ae6-34c6-40fa-a9fc-dc58cb83e822", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 845, "fields": { "book": 86, "barcode": "b81b91f7-4456-4ab2-ab6c-f074c621a75d", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 846, "fields": { "book": 110, "barcode": "c2bb1258-dd4d-4858-952a-3a717fee3df1", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 847, "fields": { "book": 83, "barcode": "bca239d6-1ecc-44ac-bd59-6532443cfdf8", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 848, "fields": { "book": 156, "barcode": "a2c8c2ab-60af-42c9-b8ac-3f52890fc16a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 849, "fields": { "book": 109, "barcode": "5bad65b6-0af6-4c88-859b-aeb59b6f817f", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 850, "fields": { "book": 127, "barcode": "49e81320-ac6a-47b0-a172-8ede71f54de6", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 851, "fields": { "book": 152, "barcode": "038e6387-a421-462f-90ce-8c47101cec8b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 852, "fields": { "book": 193, "barcode": "2f1ff284-88bc-42de-a519-da2e7d4230ab", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 853, "fields": { "book": 67, "barcode": "ccef3f21-1e32-4089-81b6-08690c50e2c6", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 854, "fields": { "book": 38, "barcode": "5be00623-6eaa-4c29-9970-b38d82a97c8e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 855, "fields": { "book": 9, "barcode": "5e494461-d11d-4573-a928-0b1013557907", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 856, "fields": { "book": 70, "barcode": "358e5c39-50e2-4a65-a55d-d68c2fe2c498", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 857, "fields": { "book": 108, "barcode": "618e4bba-f11d-4a2b-b891-807e45356a3b", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 858, "fields": { "book": 13, "barcode": "93d1e6ee-b231-4049-8c90-9e6694a9839c", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 859, "fields": { "book": 166, "barcode": "f79720e8-ec45-4a0f-8274-7161352b8b1e", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 860, "fields": { "book": 61, "barcode": "ff4c6905-55d8-4d1d-bb73-04fecda8ad75", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 861, "fields": { "book": 198, "barcode": "68f783bb-7277-4ab1-8c81-52eac3c9260c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 862, "fields": { "book": 195, "barcode": "3838c784-4f5d-43ce-b175-ae3fdda97687", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 863, "fields": { "book": 199, "barcode": "441e4158-4c57-47e9-9018-393864f77043", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 864, "fields": { "book": 192, "barcode": "1639e136-8cb3-419e-992c-9ff0cc4ce2d8", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 865, "fields": { "book": 198, "barcode": "3e780586-d243-4575-b8e2-a85ccb55676e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 866, "fields": { "book": 46, "barcode": "de976c0f-3828-48ab-b9ab-5ae98fca226a", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 867, "fields": { "book": 110, "barcode": "5eb2494e-1d39-43ae-93e6-4c65283f57ef", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 868, "fields": { "book": 9, "barcode": "2dc088f5-e452-4c31-84f4-99e085c459e5", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 869, "fields": { "book": 159, "barcode": "08a9c7c6-2ac9-497e-ad77-6776ab199d48", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 870, "fields": { "book": 12, "barcode": "ee41554c-511e-43f6-ba15-2f873307de7e", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 871, "fields": { "book": 14, "barcode": "68489fb9-1af9-4078-ad32-cb9347e989e1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 872, "fields": { "book": 52, "barcode": "570f434c-f2bf-4ca6-bf73-d2c470314ef7", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 873, "fields": { "book": 36, "barcode": "f6f14cd7-39f4-4238-8a40-c44e3ee8f646", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 874, "fields": { "book": 108, "barcode": "f390807b-76d8-49db-b158-6039b2ab1f58", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 875, "fields": { "book": 34, "barcode": "5606a04f-eaf7-4ba3-bab1-5ac22e2c011e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 876, "fields": { "book": 175, "barcode": "c2367a77-4f2c-4b23-b966-f486a099a93d", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 877, "fields": { "book": 185, "barcode": "04f9132e-f389-4ef2-9763-03c0c490d24a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 878, "fields": { "book": 140, "barcode": "c732e55b-963b-454e-8d02-4e2e3ee4d514", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 879, "fields": { "book": 97, "barcode": "d144f546-c706-42b1-b98b-8844870d27fb", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 880, "fields": { "book": 170, "barcode": "4e70e540-f7e4-46c5-bcef-709b8c71a8b2", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 881, "fields": { "book": 28, "barcode": "121ff9c2-4ffd-483b-addd-bc111d417df5", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 882, "fields": { "book": 55, "barcode": "9a47ec23-e57d-41ff-8fd9-a83376abb3bd", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 883, "fields": { "book": 131, "barcode": "1bdf8e47-82b6-4cca-b093-313cb7c91ba7", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 884, "fields": { "book": 159, "barcode": "bc52a94a-9fd8-48c6-821a-603ece6700a8", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 885, "fields": { "book": 131, "barcode": "85024203-8bc6-4027-af3e-5dba57485971", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 886, "fields": { "book": 107, "barcode": "2c3115aa-0ac5-4bac-8b62-9af89a09bbe8", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 887, "fields": { "book": 82, "barcode": "5d6324a3-1b97-4a82-b97f-2000ed47d5b1", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 888, "fields": { "book": 98, "barcode": "307606ea-78f2-43d6-83f4-6856e874b7e4", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 889, "fields": { "book": 72, "barcode": "ec011152-277b-437c-a86a-430e07b50c8a", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 890, "fields": { "book": 88, "barcode": "55473310-09b1-460c-973c-95e835d9bd2b", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 891, "fields": { "book": 177, "barcode": "e1436d0c-283c-4085-83a4-7fa24555eff4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 892, "fields": { "book": 93, "barcode": "2e193115-2734-4a3b-885a-ecd9c1ab4bb0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 893, "fields": { "book": 29, "barcode": "8e23fbcd-c7b1-480f-b565-8ebe6c2f09cd", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 894, "fields": { "book": 187, "barcode": "4d6a6f88-9ba0-4f4d-a608-924b51613938", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 895, "fields": { "book": 105, "barcode": "ae3e4e5d-1ff1-489b-b569-d6ce73f324f1", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 896, "fields": { "book": 63, "barcode": "542c6ac9-2674-4b38-8709-9f4273288a14", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 897, "fields": { "book": 106, "barcode": "412afd6c-a81b-46a0-869b-00b7ee3acf1f", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 898, "fields": { "book": 141, "barcode": "79821634-ffa7-437b-9564-b4acbffdae7a", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 899, "fields": { "book": 15, "barcode": "d6cb1945-64a5-4d7c-8e8f-cc9ff06d1e93", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 900, "fields": { "book": 199, "barcode": "31a8e226-fbef-4c25-84f0-9b21fa16f7ca", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 901, "fields": { "book": 171, "barcode": "f2fa1185-14a4-4e57-9550-94f1c0f43dbe", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 902, "fields": { "book": 74, "barcode": "e32e71eb-c314-4565-9292-eac7951b33a0", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 903, "fields": { "book": 15, "barcode": "78763ec2-fd44-4fa3-b5e1-3645396cbb3b", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 904, "fields": { "book": 200, "barcode": "86de9f38-b857-482e-8305-0a8e6e252015", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 905, "fields": { "book": 155, "barcode": "e83b31f1-74a3-463d-86d5-f38af7614d41", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 906, "fields": { "book": 14, "barcode": "c3786a14-fdba-4c3b-8030-0c78cf2e0cce", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 907, "fields": { "book": 111, "barcode": "22f88591-02b8-41b4-819a-55e070addad8", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 908, "fields": { "book": 38, "barcode": "09f78257-b852-4c8d-a62f-d02593b48182", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 909, "fields": { "book": 12, "barcode": "f59fd5d2-f0b9-426a-bd29-79dc7227639d", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 910, "fields": { "book": 160, "barcode": "3912125f-95cb-43c1-929d-fde8f39977e5", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 911, "fields": { "book": 127, "barcode": "86d85183-93c6-49b0-8e15-91a5d9a86d48", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 912, "fields": { "book": 166, "barcode": "be229a64-6181-4eed-b4d1-1150dc4c3acd", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 913, "fields": { "book": 137, "barcode": "c5df0ae8-aad5-4cd2-b97a-20e766fc67e9", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 914, "fields": { "book": 52, "barcode": "5cc55fc6-14fe-425c-b389-59cfd1017af0", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 915, "fields": { "book": 93, "barcode": "e01bb522-32d2-48fa-b714-b2c903589e8e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 916, "fields": { "book": 48, "barcode": "4ea32339-1f89-4b64-81fd-5815ce2b2cfc", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 917, "fields": { "book": 1, "barcode": "102dde1e-9a50-4898-90a8-22c7abcf6aa0", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 918, "fields": { "book": 149, "barcode": "6b306d7f-5eeb-41d9-8f37-630d11bcee33", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 919, "fields": { "book": 193, "barcode": "674c93cc-49f8-44b8-91b3-903544c81bfe", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 920, "fields": { "book": 18, "barcode": "6818eaad-feb2-41e5-a9b6-b1622db83376", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 921, "fields": { "book": 7, "barcode": "c689ee98-b77f-48fb-b84f-2c4d2df23bdd", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 922, "fields": { "book": 47, "barcode": "f9fb1c2a-2bdd-458f-8c13-e865465e1fea", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 923, "fields": { "book": 4, "barcode": "c8ddab15-7712-48ad-9028-e007e59bbef2", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 924, "fields": { "book": 141, "barcode": "a771843d-585b-443c-9ff8-ae3f81070928", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 925, "fields": { "book": 96, "barcode": "a6650834-0621-422a-8aa2-8bfffb52a88e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 926, "fields": { "book": 134, "barcode": "bb6a8ecd-9323-46b7-b952-4a9f7d5f00ec", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 927, "fields": { "book": 96, "barcode": "c631df91-d461-4044-8ff5-05d6d4d5aaac", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 928, "fields": { "book": 103, "barcode": "183647de-3a42-4211-a66f-749281cf19c9", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 929, "fields": { "book": 19, "barcode": "274c5847-e211-4081-96f7-8db848d0a0cc", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 930, "fields": { "book": 109, "barcode": "a919c282-1bb2-4ae2-bc1e-93d4e9055df2", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 931, "fields": { "book": 36, "barcode": "5117f728-e60a-472c-8e77-8e2846544db0", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 932, "fields": { "book": 106, "barcode": "c324da18-94a9-4ba6-a548-1707f0020537", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 933, "fields": { "book": 142, "barcode": "fa4b911a-98a8-473d-90c0-ec8206f77094", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 934, "fields": { "book": 191, "barcode": "576551cf-d749-487e-9dfc-b1a88a4945cb", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 935, "fields": { "book": 185, "barcode": "40da3c11-f0ab-4817-a57f-4f76ebfb8f04", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 936, "fields": { "book": 103, "barcode": "03ab8c31-27d8-465b-b078-6ba6d715c2dd", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 937, "fields": { "book": 91, "barcode": "60cd3113-7c78-40f4-b1dd-745abfca0a72", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 938, "fields": { "book": 131, "barcode": "b46f9b60-f75d-40c6-b2dc-390051fcc6d1", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 939, "fields": { "book": 171, "barcode": "ccd2fe45-bf9a-4bf1-90cd-f87f1653238a", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 940, "fields": { "book": 5, "barcode": "f93818eb-079e-4ddb-9a5b-325038bd3304", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 941, "fields": { "book": 169, "barcode": "9d7d2585-503f-4628-9c91-810fb621a088", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 942, "fields": { "book": 52, "barcode": "e79d3892-8764-4c99-89b6-0c5dea4d9bc6", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 943, "fields": { "book": 110, "barcode": "d4ceedf8-ac66-4243-9d9c-aad2a53104dd", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 944, "fields": { "book": 7, "barcode": "cc29dce6-cac7-457f-ae51-9b11a66bdadd", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 945, "fields": { "book": 65, "barcode": "e623ef52-e894-4812-81db-8cc127ce718b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 946, "fields": { "book": 73, "barcode": "2a91c6e9-6839-4c31-8d4c-0ca8135d3c8f", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 947, "fields": { "book": 15, "barcode": "e882c06c-5382-4c02-88e2-cba8a8adad74", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 948, "fields": { "book": 138, "barcode": "13032a72-8b74-420c-bab1-0f6c034a5d12", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 949, "fields": { "book": 50, "barcode": "3e2c9fb4-1e87-499e-a6b8-a62f7702ad58", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 950, "fields": { "book": 83, "barcode": "ac6d02e8-031a-40d2-8daf-7ae3dcddf622", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 951, "fields": { "book": 90, "barcode": "4b2fbd15-77de-40af-9173-77b14963da7d", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 952, "fields": { "book": 36, "barcode": "9529065d-f1e6-4160-99dd-0b76fb4fb22b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 953, "fields": { "book": 174, "barcode": "e5b76662-66c1-40d7-9ebb-532a29c46254", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 954, "fields": { "book": 104, "barcode": "b50e46e6-c790-460a-994f-0d6aa1e3336e", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 955, "fields": { "book": 149, "barcode": "fad15912-837a-4c50-8f82-67aa97190c81", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 956, "fields": { "book": 149, "barcode": "5990524d-bef4-4e76-9859-735c49f97820", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 957, "fields": { "book": 109, "barcode": "628e6759-0403-49e3-a738-6405acb52345", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 958, "fields": { "book": 185, "barcode": "2e86adfb-d390-4598-b995-a4e3e9cd0e9e", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 959, "fields": { "book": 188, "barcode": "41a64c0f-d99c-4f25-8285-03caf453904e", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 960, "fields": { "book": 84, "barcode": "530f62ba-bc09-42a4-92a9-70b0e9ade996", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 961, "fields": { "book": 34, "barcode": "b9126946-93d1-4ad7-a8d0-e695b2541dc8", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 962, "fields": { "book": 87, "barcode": "576afe59-b9a7-43da-8586-56663fae0a36", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 963, "fields": { "book": 104, "barcode": "2218c683-26e0-4618-ae4f-ad0c018c4aae", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 964, "fields": { "book": 67, "barcode": "ce06d4b2-4f23-4acf-b4e7-714c9ce5ac05", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 965, "fields": { "book": 27, "barcode": "c6279471-d305-4b27-9b6a-8b4d5dfd7086", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 966, "fields": { "book": 56, "barcode": "83d80024-e04a-43c5-92d5-5ab4cf6b4d25", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 967, "fields": { "book": 82, "barcode": "3381d50e-087e-4078-88e6-c305240660f1", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 968, "fields": { "book": 147, "barcode": "489542af-ce64-4574-8b20-9e4a11748434", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 969, "fields": { "book": 200, "barcode": "508999a0-b3ce-4413-a666-723e36a5bb01", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 970, "fields": { "book": 78, "barcode": "8a432485-8262-40cc-a930-39fb090b3b81", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 971, "fields": { "book": 31, "barcode": "a21f4284-73de-4e5f-9962-5d8ca66b3ccf", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 972, "fields": { "book": 132, "barcode": "54ca0a7d-10ad-4499-a237-4abfb61907fb", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 973, "fields": { "book": 183, "barcode": "14fa9985-f150-42fc-ae27-aa455093b0a8", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 974, "fields": { "book": 126, "barcode": "c758104b-c872-4e34-a9fa-8ad8485c8182", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 975, "fields": { "book": 31, "barcode": "40c11b43-157c-49c8-b98a-5b97807d33ee", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 976, "fields": { "book": 113, "barcode": "941b74b8-8666-47a7-a692-198a140c0c25", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 977, "fields": { "book": 84, "barcode": "5c52932e-b6e2-440e-9290-f3ace5478c1b", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 978, "fields": { "book": 60, "barcode": "9aa00d47-6457-44ca-8093-fc8c642c889e", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 979, "fields": { "book": 66, "barcode": "267f4f17-9b27-4937-9d05-d5a64609317b", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 980, "fields": { "book": 200, "barcode": "06a2b4ba-fd5c-47c2-98ff-e709ffdf3f96", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 981, "fields": { "book": 125, "barcode": "cdc865bf-f883-49eb-b05b-c7de5bc2d8c7", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 982, "fields": { "book": 174, "barcode": "af000476-51bd-4279-9e9d-f99e253f7425", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 983, "fields": { "book": 54, "barcode": "2ab3b180-4b00-468a-a90f-d51c359ea3b1", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 984, "fields": { "book": 69, "barcode": "a8b84656-7f76-4f57-91e1-48d6b8de397c", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 985, "fields": { "book": 140, "barcode": "4c2910b7-3493-4cae-8257-9a89e9e3e523", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 986, "fields": { "book": 49, "barcode": "13945562-7e88-4669-bf05-fef539593158", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 987, "fields": { "book": 84, "barcode": "c50bdce7-eb6d-4c20-b9c3-bbb1aaf0ccd3", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 988, "fields": { "book": 117, "barcode": "e0d9edff-d1e3-492c-9357-9fc96d7e3d50", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 989, "fields": { "book": 123, "barcode": "81e6612e-3f46-4857-98c1-47a002edbc77", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 990, "fields": { "book": 56, "barcode": "a2b6a26b-4c23-4718-a008-61740fec3e34", "book_type": 3 } }, { "model": "library_management.physicalcopy", "pk": 991, "fields": { "book": 158, "barcode": "7c99e6c6-b33a-41e5-ba1e-daa5039cbff2", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 992, "fields": { "book": 31, "barcode": "e28f36f1-7088-4f21-baa7-08c12832c318", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 993, "fields": { "book": 116, "barcode": "197074da-20fa-460c-8e9d-a97a02359594", "book_type": 5 } }, { "model": "library_management.physicalcopy", "pk": 994, "fields": { "book": 29, "barcode": "8c59d5d5-f09d-48e5-95e9-6ff572ce04e4", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 995, "fields": { "book": 13, "barcode": "92ea111e-6cd2-423e-9ed3-15461771c596", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 996, "fields": { "book": 112, "barcode": "34208b86-26b9-4b24-b448-fd2cb0f65c57", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 997, "fields": { "book": 87, "barcode": "371d790b-75d3-477b-8582-cb2b7dda9939", "book_type": 4 } }, { "model": "library_management.physicalcopy", "pk": 998, "fields": { "book": 22, "barcode": "241cb5d2-576a-4d32-a78d-06c3efd42568", "book_type": 1 } }, { "model": "library_management.physicalcopy", "pk": 999, "fields": { "book": 167, "barcode": "35204de0-9cc9-4bbd-92c1-6eaa25c81657", "book_type": 2 } }, { "model": "library_management.physicalcopy", "pk": 1000, "fields": { "book": 53, "barcode": "8f67335c-9a8e-4a64-8693-dd8277960511", "book_type": 1 } } ] django-taggit-6.1.0/sample_taggit/fixtures/0008_condition_tagged_item.json000066400000000000000000003757731467620475500266550ustar00rootroot00000000000000[ { "model": "library_management.conditiontaggeditem", "pk": 7955, "fields": { "tag": 17, "content_object": 1 } }, { "model": "library_management.conditiontaggeditem", "pk": 7956, "fields": { "tag": 14, "content_object": 2 } }, { "model": "library_management.conditiontaggeditem", "pk": 7957, "fields": { "tag": 7, "content_object": 3 } }, { "model": "library_management.conditiontaggeditem", "pk": 7958, "fields": { "tag": 10, "content_object": 3 } }, { "model": "library_management.conditiontaggeditem", "pk": 7959, "fields": { "tag": 7, "content_object": 4 } }, { "model": "library_management.conditiontaggeditem", "pk": 7960, "fields": { "tag": 13, "content_object": 4 } }, { "model": "library_management.conditiontaggeditem", "pk": 7961, "fields": { "tag": 12, "content_object": 6 } }, { "model": "library_management.conditiontaggeditem", "pk": 7962, "fields": { "tag": 15, "content_object": 6 } }, { "model": "library_management.conditiontaggeditem", "pk": 7963, "fields": { "tag": 14, "content_object": 7 } }, { "model": "library_management.conditiontaggeditem", "pk": 7964, "fields": { "tag": 9, "content_object": 8 } }, { "model": "library_management.conditiontaggeditem", "pk": 7965, "fields": { "tag": 2, "content_object": 11 } }, { "model": "library_management.conditiontaggeditem", "pk": 7966, "fields": { "tag": 12, "content_object": 12 } }, { "model": "library_management.conditiontaggeditem", "pk": 7967, "fields": { "tag": 15, "content_object": 13 } }, { "model": "library_management.conditiontaggeditem", "pk": 7968, "fields": { "tag": 13, "content_object": 15 } }, { "model": "library_management.conditiontaggeditem", "pk": 7969, "fields": { "tag": 17, "content_object": 17 } }, { "model": "library_management.conditiontaggeditem", "pk": 7970, "fields": { "tag": 1, "content_object": 18 } }, { "model": "library_management.conditiontaggeditem", "pk": 7971, "fields": { "tag": 9, "content_object": 18 } }, { "model": "library_management.conditiontaggeditem", "pk": 7972, "fields": { "tag": 16, "content_object": 19 } }, { "model": "library_management.conditiontaggeditem", "pk": 7973, "fields": { "tag": 4, "content_object": 22 } }, { "model": "library_management.conditiontaggeditem", "pk": 7974, "fields": { "tag": 6, "content_object": 22 } }, { "model": "library_management.conditiontaggeditem", "pk": 7975, "fields": { "tag": 3, "content_object": 25 } }, { "model": "library_management.conditiontaggeditem", "pk": 7976, "fields": { "tag": 14, "content_object": 25 } }, { "model": "library_management.conditiontaggeditem", "pk": 7977, "fields": { "tag": 16, "content_object": 27 } }, { "model": "library_management.conditiontaggeditem", "pk": 7978, "fields": { "tag": 12, "content_object": 27 } }, { "model": "library_management.conditiontaggeditem", "pk": 7979, "fields": { "tag": 11, "content_object": 28 } }, { "model": "library_management.conditiontaggeditem", "pk": 7980, "fields": { "tag": 4, "content_object": 28 } }, { "model": "library_management.conditiontaggeditem", "pk": 7981, "fields": { "tag": 13, "content_object": 30 } }, { "model": "library_management.conditiontaggeditem", "pk": 7982, "fields": { "tag": 13, "content_object": 31 } }, { "model": "library_management.conditiontaggeditem", "pk": 7983, "fields": { "tag": 15, "content_object": 32 } }, { "model": "library_management.conditiontaggeditem", "pk": 7984, "fields": { "tag": 11, "content_object": 32 } }, { "model": "library_management.conditiontaggeditem", "pk": 7985, "fields": { "tag": 7, "content_object": 34 } }, { "model": "library_management.conditiontaggeditem", "pk": 7986, "fields": { "tag": 18, "content_object": 34 } }, { "model": "library_management.conditiontaggeditem", "pk": 7987, "fields": { "tag": 16, "content_object": 35 } }, { "model": "library_management.conditiontaggeditem", "pk": 7988, "fields": { "tag": 7, "content_object": 39 } }, { "model": "library_management.conditiontaggeditem", "pk": 7989, "fields": { "tag": 14, "content_object": 39 } }, { "model": "library_management.conditiontaggeditem", "pk": 7990, "fields": { "tag": 18, "content_object": 41 } }, { "model": "library_management.conditiontaggeditem", "pk": 7991, "fields": { "tag": 3, "content_object": 42 } }, { "model": "library_management.conditiontaggeditem", "pk": 7992, "fields": { "tag": 5, "content_object": 42 } }, { "model": "library_management.conditiontaggeditem", "pk": 7993, "fields": { "tag": 8, "content_object": 43 } }, { "model": "library_management.conditiontaggeditem", "pk": 7994, "fields": { "tag": 16, "content_object": 43 } }, { "model": "library_management.conditiontaggeditem", "pk": 7995, "fields": { "tag": 6, "content_object": 45 } }, { "model": "library_management.conditiontaggeditem", "pk": 7996, "fields": { "tag": 18, "content_object": 46 } }, { "model": "library_management.conditiontaggeditem", "pk": 7997, "fields": { "tag": 1, "content_object": 46 } }, { "model": "library_management.conditiontaggeditem", "pk": 7998, "fields": { "tag": 3, "content_object": 47 } }, { "model": "library_management.conditiontaggeditem", "pk": 7999, "fields": { "tag": 10, "content_object": 47 } }, { "model": "library_management.conditiontaggeditem", "pk": 8000, "fields": { "tag": 18, "content_object": 49 } }, { "model": "library_management.conditiontaggeditem", "pk": 8001, "fields": { "tag": 5, "content_object": 51 } }, { "model": "library_management.conditiontaggeditem", "pk": 8002, "fields": { "tag": 4, "content_object": 51 } }, { "model": "library_management.conditiontaggeditem", "pk": 8003, "fields": { "tag": 8, "content_object": 52 } }, { "model": "library_management.conditiontaggeditem", "pk": 8004, "fields": { "tag": 7, "content_object": 53 } }, { "model": "library_management.conditiontaggeditem", "pk": 8005, "fields": { "tag": 9, "content_object": 57 } }, { "model": "library_management.conditiontaggeditem", "pk": 8006, "fields": { "tag": 14, "content_object": 57 } }, { "model": "library_management.conditiontaggeditem", "pk": 8007, "fields": { "tag": 20, "content_object": 60 } }, { "model": "library_management.conditiontaggeditem", "pk": 8008, "fields": { "tag": 12, "content_object": 60 } }, { "model": "library_management.conditiontaggeditem", "pk": 8009, "fields": { "tag": 5, "content_object": 61 } }, { "model": "library_management.conditiontaggeditem", "pk": 8010, "fields": { "tag": 10, "content_object": 63 } }, { "model": "library_management.conditiontaggeditem", "pk": 8011, "fields": { "tag": 5, "content_object": 63 } }, { "model": "library_management.conditiontaggeditem", "pk": 8012, "fields": { "tag": 10, "content_object": 64 } }, { "model": "library_management.conditiontaggeditem", "pk": 8013, "fields": { "tag": 5, "content_object": 64 } }, { "model": "library_management.conditiontaggeditem", "pk": 8014, "fields": { "tag": 14, "content_object": 65 } }, { "model": "library_management.conditiontaggeditem", "pk": 8015, "fields": { "tag": 13, "content_object": 65 } }, { "model": "library_management.conditiontaggeditem", "pk": 8016, "fields": { "tag": 14, "content_object": 68 } }, { "model": "library_management.conditiontaggeditem", "pk": 8017, "fields": { "tag": 10, "content_object": 70 } }, { "model": "library_management.conditiontaggeditem", "pk": 8018, "fields": { "tag": 16, "content_object": 71 } }, { "model": "library_management.conditiontaggeditem", "pk": 8019, "fields": { "tag": 18, "content_object": 74 } }, { "model": "library_management.conditiontaggeditem", "pk": 8020, "fields": { "tag": 2, "content_object": 75 } }, { "model": "library_management.conditiontaggeditem", "pk": 8021, "fields": { "tag": 10, "content_object": 76 } }, { "model": "library_management.conditiontaggeditem", "pk": 8022, "fields": { "tag": 2, "content_object": 76 } }, { "model": "library_management.conditiontaggeditem", "pk": 8023, "fields": { "tag": 8, "content_object": 77 } }, { "model": "library_management.conditiontaggeditem", "pk": 8024, "fields": { "tag": 5, "content_object": 79 } }, { "model": "library_management.conditiontaggeditem", "pk": 8025, "fields": { "tag": 20, "content_object": 79 } }, { "model": "library_management.conditiontaggeditem", "pk": 8026, "fields": { "tag": 2, "content_object": 80 } }, { "model": "library_management.conditiontaggeditem", "pk": 8027, "fields": { "tag": 11, "content_object": 81 } }, { "model": "library_management.conditiontaggeditem", "pk": 8028, "fields": { "tag": 13, "content_object": 81 } }, { "model": "library_management.conditiontaggeditem", "pk": 8029, "fields": { "tag": 18, "content_object": 83 } }, { "model": "library_management.conditiontaggeditem", "pk": 8030, "fields": { "tag": 8, "content_object": 84 } }, { "model": "library_management.conditiontaggeditem", "pk": 8031, "fields": { "tag": 20, "content_object": 84 } }, { "model": "library_management.conditiontaggeditem", "pk": 8032, "fields": { "tag": 20, "content_object": 85 } }, { "model": "library_management.conditiontaggeditem", "pk": 8033, "fields": { "tag": 10, "content_object": 85 } }, { "model": "library_management.conditiontaggeditem", "pk": 8034, "fields": { "tag": 9, "content_object": 87 } }, { "model": "library_management.conditiontaggeditem", "pk": 8035, "fields": { "tag": 12, "content_object": 87 } }, { "model": "library_management.conditiontaggeditem", "pk": 8036, "fields": { "tag": 6, "content_object": 90 } }, { "model": "library_management.conditiontaggeditem", "pk": 8037, "fields": { "tag": 3, "content_object": 91 } }, { "model": "library_management.conditiontaggeditem", "pk": 8038, "fields": { "tag": 10, "content_object": 91 } }, { "model": "library_management.conditiontaggeditem", "pk": 8039, "fields": { "tag": 17, "content_object": 93 } }, { "model": "library_management.conditiontaggeditem", "pk": 8040, "fields": { "tag": 15, "content_object": 93 } }, { "model": "library_management.conditiontaggeditem", "pk": 8041, "fields": { "tag": 18, "content_object": 94 } }, { "model": "library_management.conditiontaggeditem", "pk": 8042, "fields": { "tag": 9, "content_object": 95 } }, { "model": "library_management.conditiontaggeditem", "pk": 8043, "fields": { "tag": 1, "content_object": 98 } }, { "model": "library_management.conditiontaggeditem", "pk": 8044, "fields": { "tag": 1, "content_object": 99 } }, { "model": "library_management.conditiontaggeditem", "pk": 8045, "fields": { "tag": 16, "content_object": 99 } }, { "model": "library_management.conditiontaggeditem", "pk": 8046, "fields": { "tag": 3, "content_object": 100 } }, { "model": "library_management.conditiontaggeditem", "pk": 8047, "fields": { "tag": 14, "content_object": 100 } }, { "model": "library_management.conditiontaggeditem", "pk": 8048, "fields": { "tag": 11, "content_object": 101 } }, { "model": "library_management.conditiontaggeditem", "pk": 8049, "fields": { "tag": 4, "content_object": 101 } }, { "model": "library_management.conditiontaggeditem", "pk": 8050, "fields": { "tag": 13, "content_object": 102 } }, { "model": "library_management.conditiontaggeditem", "pk": 8051, "fields": { "tag": 7, "content_object": 104 } }, { "model": "library_management.conditiontaggeditem", "pk": 8052, "fields": { "tag": 5, "content_object": 104 } }, { "model": "library_management.conditiontaggeditem", "pk": 8053, "fields": { "tag": 8, "content_object": 106 } }, { "model": "library_management.conditiontaggeditem", "pk": 8054, "fields": { "tag": 18, "content_object": 106 } }, { "model": "library_management.conditiontaggeditem", "pk": 8055, "fields": { "tag": 13, "content_object": 107 } }, { "model": "library_management.conditiontaggeditem", "pk": 8056, "fields": { "tag": 16, "content_object": 108 } }, { "model": "library_management.conditiontaggeditem", "pk": 8057, "fields": { "tag": 4, "content_object": 109 } }, { "model": "library_management.conditiontaggeditem", "pk": 8058, "fields": { "tag": 2, "content_object": 109 } }, { "model": "library_management.conditiontaggeditem", "pk": 8059, "fields": { "tag": 15, "content_object": 111 } }, { "model": "library_management.conditiontaggeditem", "pk": 8060, "fields": { "tag": 13, "content_object": 112 } }, { "model": "library_management.conditiontaggeditem", "pk": 8061, "fields": { "tag": 7, "content_object": 113 } }, { "model": "library_management.conditiontaggeditem", "pk": 8062, "fields": { "tag": 10, "content_object": 113 } }, { "model": "library_management.conditiontaggeditem", "pk": 8063, "fields": { "tag": 7, "content_object": 115 } }, { "model": "library_management.conditiontaggeditem", "pk": 8064, "fields": { "tag": 16, "content_object": 119 } }, { "model": "library_management.conditiontaggeditem", "pk": 8065, "fields": { "tag": 13, "content_object": 119 } }, { "model": "library_management.conditiontaggeditem", "pk": 8066, "fields": { "tag": 11, "content_object": 120 } }, { "model": "library_management.conditiontaggeditem", "pk": 8067, "fields": { "tag": 14, "content_object": 120 } }, { "model": "library_management.conditiontaggeditem", "pk": 8068, "fields": { "tag": 20, "content_object": 122 } }, { "model": "library_management.conditiontaggeditem", "pk": 8069, "fields": { "tag": 18, "content_object": 122 } }, { "model": "library_management.conditiontaggeditem", "pk": 8070, "fields": { "tag": 18, "content_object": 126 } }, { "model": "library_management.conditiontaggeditem", "pk": 8071, "fields": { "tag": 14, "content_object": 126 } }, { "model": "library_management.conditiontaggeditem", "pk": 8072, "fields": { "tag": 1, "content_object": 127 } }, { "model": "library_management.conditiontaggeditem", "pk": 8073, "fields": { "tag": 4, "content_object": 129 } }, { "model": "library_management.conditiontaggeditem", "pk": 8074, "fields": { "tag": 4, "content_object": 130 } }, { "model": "library_management.conditiontaggeditem", "pk": 8075, "fields": { "tag": 1, "content_object": 132 } }, { "model": "library_management.conditiontaggeditem", "pk": 8076, "fields": { "tag": 10, "content_object": 132 } }, { "model": "library_management.conditiontaggeditem", "pk": 8077, "fields": { "tag": 18, "content_object": 134 } }, { "model": "library_management.conditiontaggeditem", "pk": 8078, "fields": { "tag": 17, "content_object": 135 } }, { "model": "library_management.conditiontaggeditem", "pk": 8079, "fields": { "tag": 13, "content_object": 136 } }, { "model": "library_management.conditiontaggeditem", "pk": 8080, "fields": { "tag": 12, "content_object": 137 } }, { "model": "library_management.conditiontaggeditem", "pk": 8081, "fields": { "tag": 9, "content_object": 137 } }, { "model": "library_management.conditiontaggeditem", "pk": 8082, "fields": { "tag": 7, "content_object": 138 } }, { "model": "library_management.conditiontaggeditem", "pk": 8083, "fields": { "tag": 12, "content_object": 138 } }, { "model": "library_management.conditiontaggeditem", "pk": 8084, "fields": { "tag": 3, "content_object": 139 } }, { "model": "library_management.conditiontaggeditem", "pk": 8085, "fields": { "tag": 5, "content_object": 139 } }, { "model": "library_management.conditiontaggeditem", "pk": 8086, "fields": { "tag": 12, "content_object": 142 } }, { "model": "library_management.conditiontaggeditem", "pk": 8087, "fields": { "tag": 16, "content_object": 143 } }, { "model": "library_management.conditiontaggeditem", "pk": 8088, "fields": { "tag": 2, "content_object": 144 } }, { "model": "library_management.conditiontaggeditem", "pk": 8089, "fields": { "tag": 13, "content_object": 145 } }, { "model": "library_management.conditiontaggeditem", "pk": 8090, "fields": { "tag": 16, "content_object": 145 } }, { "model": "library_management.conditiontaggeditem", "pk": 8091, "fields": { "tag": 8, "content_object": 147 } }, { "model": "library_management.conditiontaggeditem", "pk": 8092, "fields": { "tag": 18, "content_object": 147 } }, { "model": "library_management.conditiontaggeditem", "pk": 8093, "fields": { "tag": 10, "content_object": 148 } }, { "model": "library_management.conditiontaggeditem", "pk": 8094, "fields": { "tag": 11, "content_object": 148 } }, { "model": "library_management.conditiontaggeditem", "pk": 8095, "fields": { "tag": 13, "content_object": 149 } }, { "model": "library_management.conditiontaggeditem", "pk": 8096, "fields": { "tag": 4, "content_object": 149 } }, { "model": "library_management.conditiontaggeditem", "pk": 8097, "fields": { "tag": 6, "content_object": 150 } }, { "model": "library_management.conditiontaggeditem", "pk": 8098, "fields": { "tag": 10, "content_object": 153 } }, { "model": "library_management.conditiontaggeditem", "pk": 8099, "fields": { "tag": 1, "content_object": 153 } }, { "model": "library_management.conditiontaggeditem", "pk": 8100, "fields": { "tag": 7, "content_object": 154 } }, { "model": "library_management.conditiontaggeditem", "pk": 8101, "fields": { "tag": 11, "content_object": 155 } }, { "model": "library_management.conditiontaggeditem", "pk": 8102, "fields": { "tag": 9, "content_object": 156 } }, { "model": "library_management.conditiontaggeditem", "pk": 8103, "fields": { "tag": 7, "content_object": 157 } }, { "model": "library_management.conditiontaggeditem", "pk": 8104, "fields": { "tag": 11, "content_object": 158 } }, { "model": "library_management.conditiontaggeditem", "pk": 8105, "fields": { "tag": 6, "content_object": 158 } }, { "model": "library_management.conditiontaggeditem", "pk": 8106, "fields": { "tag": 15, "content_object": 159 } }, { "model": "library_management.conditiontaggeditem", "pk": 8107, "fields": { "tag": 20, "content_object": 160 } }, { "model": "library_management.conditiontaggeditem", "pk": 8108, "fields": { "tag": 2, "content_object": 160 } }, { "model": "library_management.conditiontaggeditem", "pk": 8109, "fields": { "tag": 11, "content_object": 161 } }, { "model": "library_management.conditiontaggeditem", "pk": 8110, "fields": { "tag": 12, "content_object": 163 } }, { "model": "library_management.conditiontaggeditem", "pk": 8111, "fields": { "tag": 12, "content_object": 164 } }, { "model": "library_management.conditiontaggeditem", "pk": 8112, "fields": { "tag": 14, "content_object": 165 } }, { "model": "library_management.conditiontaggeditem", "pk": 8113, "fields": { "tag": 8, "content_object": 165 } }, { "model": "library_management.conditiontaggeditem", "pk": 8114, "fields": { "tag": 16, "content_object": 166 } }, { "model": "library_management.conditiontaggeditem", "pk": 8115, "fields": { "tag": 18, "content_object": 166 } }, { "model": "library_management.conditiontaggeditem", "pk": 8116, "fields": { "tag": 2, "content_object": 167 } }, { "model": "library_management.conditiontaggeditem", "pk": 8117, "fields": { "tag": 18, "content_object": 168 } }, { "model": "library_management.conditiontaggeditem", "pk": 8118, "fields": { "tag": 7, "content_object": 168 } }, { "model": "library_management.conditiontaggeditem", "pk": 8119, "fields": { "tag": 3, "content_object": 170 } }, { "model": "library_management.conditiontaggeditem", "pk": 8120, "fields": { "tag": 4, "content_object": 171 } }, { "model": "library_management.conditiontaggeditem", "pk": 8121, "fields": { "tag": 20, "content_object": 172 } }, { "model": "library_management.conditiontaggeditem", "pk": 8122, "fields": { "tag": 2, "content_object": 172 } }, { "model": "library_management.conditiontaggeditem", "pk": 8123, "fields": { "tag": 17, "content_object": 174 } }, { "model": "library_management.conditiontaggeditem", "pk": 8124, "fields": { "tag": 14, "content_object": 175 } }, { "model": "library_management.conditiontaggeditem", "pk": 8125, "fields": { "tag": 15, "content_object": 175 } }, { "model": "library_management.conditiontaggeditem", "pk": 8126, "fields": { "tag": 16, "content_object": 176 } }, { "model": "library_management.conditiontaggeditem", "pk": 8127, "fields": { "tag": 11, "content_object": 182 } }, { "model": "library_management.conditiontaggeditem", "pk": 8128, "fields": { "tag": 4, "content_object": 184 } }, { "model": "library_management.conditiontaggeditem", "pk": 8129, "fields": { "tag": 10, "content_object": 185 } }, { "model": "library_management.conditiontaggeditem", "pk": 8130, "fields": { "tag": 2, "content_object": 185 } }, { "model": "library_management.conditiontaggeditem", "pk": 8131, "fields": { "tag": 11, "content_object": 186 } }, { "model": "library_management.conditiontaggeditem", "pk": 8132, "fields": { "tag": 4, "content_object": 187 } }, { "model": "library_management.conditiontaggeditem", "pk": 8133, "fields": { "tag": 7, "content_object": 187 } }, { "model": "library_management.conditiontaggeditem", "pk": 8134, "fields": { "tag": 6, "content_object": 188 } }, { "model": "library_management.conditiontaggeditem", "pk": 8135, "fields": { "tag": 9, "content_object": 190 } }, { "model": "library_management.conditiontaggeditem", "pk": 8136, "fields": { "tag": 7, "content_object": 193 } }, { "model": "library_management.conditiontaggeditem", "pk": 8137, "fields": { "tag": 8, "content_object": 201 } }, { "model": "library_management.conditiontaggeditem", "pk": 8138, "fields": { "tag": 10, "content_object": 203 } }, { "model": "library_management.conditiontaggeditem", "pk": 8139, "fields": { "tag": 11, "content_object": 204 } }, { "model": "library_management.conditiontaggeditem", "pk": 8140, "fields": { "tag": 16, "content_object": 204 } }, { "model": "library_management.conditiontaggeditem", "pk": 8141, "fields": { "tag": 1, "content_object": 205 } }, { "model": "library_management.conditiontaggeditem", "pk": 8142, "fields": { "tag": 7, "content_object": 206 } }, { "model": "library_management.conditiontaggeditem", "pk": 8143, "fields": { "tag": 9, "content_object": 207 } }, { "model": "library_management.conditiontaggeditem", "pk": 8144, "fields": { "tag": 15, "content_object": 207 } }, { "model": "library_management.conditiontaggeditem", "pk": 8145, "fields": { "tag": 3, "content_object": 210 } }, { "model": "library_management.conditiontaggeditem", "pk": 8146, "fields": { "tag": 11, "content_object": 211 } }, { "model": "library_management.conditiontaggeditem", "pk": 8147, "fields": { "tag": 9, "content_object": 212 } }, { "model": "library_management.conditiontaggeditem", "pk": 8148, "fields": { "tag": 9, "content_object": 214 } }, { "model": "library_management.conditiontaggeditem", "pk": 8149, "fields": { "tag": 17, "content_object": 214 } }, { "model": "library_management.conditiontaggeditem", "pk": 8150, "fields": { "tag": 6, "content_object": 215 } }, { "model": "library_management.conditiontaggeditem", "pk": 8151, "fields": { "tag": 10, "content_object": 216 } }, { "model": "library_management.conditiontaggeditem", "pk": 8152, "fields": { "tag": 8, "content_object": 218 } }, { "model": "library_management.conditiontaggeditem", "pk": 8153, "fields": { "tag": 12, "content_object": 219 } }, { "model": "library_management.conditiontaggeditem", "pk": 8154, "fields": { "tag": 15, "content_object": 220 } }, { "model": "library_management.conditiontaggeditem", "pk": 8155, "fields": { "tag": 18, "content_object": 221 } }, { "model": "library_management.conditiontaggeditem", "pk": 8156, "fields": { "tag": 2, "content_object": 222 } }, { "model": "library_management.conditiontaggeditem", "pk": 8157, "fields": { "tag": 16, "content_object": 223 } }, { "model": "library_management.conditiontaggeditem", "pk": 8158, "fields": { "tag": 9, "content_object": 223 } }, { "model": "library_management.conditiontaggeditem", "pk": 8159, "fields": { "tag": 11, "content_object": 225 } }, { "model": "library_management.conditiontaggeditem", "pk": 8160, "fields": { "tag": 14, "content_object": 227 } }, { "model": "library_management.conditiontaggeditem", "pk": 8161, "fields": { "tag": 18, "content_object": 228 } }, { "model": "library_management.conditiontaggeditem", "pk": 8162, "fields": { "tag": 7, "content_object": 228 } }, { "model": "library_management.conditiontaggeditem", "pk": 8163, "fields": { "tag": 20, "content_object": 230 } }, { "model": "library_management.conditiontaggeditem", "pk": 8164, "fields": { "tag": 13, "content_object": 231 } }, { "model": "library_management.conditiontaggeditem", "pk": 8165, "fields": { "tag": 14, "content_object": 231 } }, { "model": "library_management.conditiontaggeditem", "pk": 8166, "fields": { "tag": 4, "content_object": 235 } }, { "model": "library_management.conditiontaggeditem", "pk": 8167, "fields": { "tag": 4, "content_object": 236 } }, { "model": "library_management.conditiontaggeditem", "pk": 8168, "fields": { "tag": 9, "content_object": 237 } }, { "model": "library_management.conditiontaggeditem", "pk": 8169, "fields": { "tag": 17, "content_object": 239 } }, { "model": "library_management.conditiontaggeditem", "pk": 8170, "fields": { "tag": 3, "content_object": 240 } }, { "model": "library_management.conditiontaggeditem", "pk": 8171, "fields": { "tag": 10, "content_object": 241 } }, { "model": "library_management.conditiontaggeditem", "pk": 8172, "fields": { "tag": 14, "content_object": 241 } }, { "model": "library_management.conditiontaggeditem", "pk": 8173, "fields": { "tag": 2, "content_object": 242 } }, { "model": "library_management.conditiontaggeditem", "pk": 8174, "fields": { "tag": 11, "content_object": 242 } }, { "model": "library_management.conditiontaggeditem", "pk": 8175, "fields": { "tag": 15, "content_object": 243 } }, { "model": "library_management.conditiontaggeditem", "pk": 8176, "fields": { "tag": 15, "content_object": 244 } }, { "model": "library_management.conditiontaggeditem", "pk": 8177, "fields": { "tag": 18, "content_object": 246 } }, { "model": "library_management.conditiontaggeditem", "pk": 8178, "fields": { "tag": 10, "content_object": 246 } }, { "model": "library_management.conditiontaggeditem", "pk": 8179, "fields": { "tag": 11, "content_object": 247 } }, { "model": "library_management.conditiontaggeditem", "pk": 8180, "fields": { "tag": 15, "content_object": 247 } }, { "model": "library_management.conditiontaggeditem", "pk": 8181, "fields": { "tag": 12, "content_object": 248 } }, { "model": "library_management.conditiontaggeditem", "pk": 8182, "fields": { "tag": 7, "content_object": 250 } }, { "model": "library_management.conditiontaggeditem", "pk": 8183, "fields": { "tag": 7, "content_object": 251 } }, { "model": "library_management.conditiontaggeditem", "pk": 8184, "fields": { "tag": 13, "content_object": 252 } }, { "model": "library_management.conditiontaggeditem", "pk": 8185, "fields": { "tag": 20, "content_object": 252 } }, { "model": "library_management.conditiontaggeditem", "pk": 8186, "fields": { "tag": 12, "content_object": 253 } }, { "model": "library_management.conditiontaggeditem", "pk": 8187, "fields": { "tag": 10, "content_object": 253 } }, { "model": "library_management.conditiontaggeditem", "pk": 8188, "fields": { "tag": 16, "content_object": 254 } }, { "model": "library_management.conditiontaggeditem", "pk": 8189, "fields": { "tag": 6, "content_object": 255 } }, { "model": "library_management.conditiontaggeditem", "pk": 8190, "fields": { "tag": 2, "content_object": 256 } }, { "model": "library_management.conditiontaggeditem", "pk": 8191, "fields": { "tag": 16, "content_object": 256 } }, { "model": "library_management.conditiontaggeditem", "pk": 8192, "fields": { "tag": 7, "content_object": 257 } }, { "model": "library_management.conditiontaggeditem", "pk": 8193, "fields": { "tag": 3, "content_object": 260 } }, { "model": "library_management.conditiontaggeditem", "pk": 8194, "fields": { "tag": 6, "content_object": 263 } }, { "model": "library_management.conditiontaggeditem", "pk": 8195, "fields": { "tag": 7, "content_object": 264 } }, { "model": "library_management.conditiontaggeditem", "pk": 8196, "fields": { "tag": 18, "content_object": 264 } }, { "model": "library_management.conditiontaggeditem", "pk": 8197, "fields": { "tag": 5, "content_object": 265 } }, { "model": "library_management.conditiontaggeditem", "pk": 8198, "fields": { "tag": 11, "content_object": 265 } }, { "model": "library_management.conditiontaggeditem", "pk": 8199, "fields": { "tag": 7, "content_object": 266 } }, { "model": "library_management.conditiontaggeditem", "pk": 8200, "fields": { "tag": 12, "content_object": 266 } }, { "model": "library_management.conditiontaggeditem", "pk": 8201, "fields": { "tag": 7, "content_object": 267 } }, { "model": "library_management.conditiontaggeditem", "pk": 8202, "fields": { "tag": 5, "content_object": 267 } }, { "model": "library_management.conditiontaggeditem", "pk": 8203, "fields": { "tag": 3, "content_object": 269 } }, { "model": "library_management.conditiontaggeditem", "pk": 8204, "fields": { "tag": 11, "content_object": 269 } }, { "model": "library_management.conditiontaggeditem", "pk": 8205, "fields": { "tag": 8, "content_object": 270 } }, { "model": "library_management.conditiontaggeditem", "pk": 8206, "fields": { "tag": 20, "content_object": 272 } }, { "model": "library_management.conditiontaggeditem", "pk": 8207, "fields": { "tag": 3, "content_object": 272 } }, { "model": "library_management.conditiontaggeditem", "pk": 8208, "fields": { "tag": 20, "content_object": 273 } }, { "model": "library_management.conditiontaggeditem", "pk": 8209, "fields": { "tag": 3, "content_object": 274 } }, { "model": "library_management.conditiontaggeditem", "pk": 8210, "fields": { "tag": 4, "content_object": 274 } }, { "model": "library_management.conditiontaggeditem", "pk": 8211, "fields": { "tag": 9, "content_object": 275 } }, { "model": "library_management.conditiontaggeditem", "pk": 8212, "fields": { "tag": 3, "content_object": 275 } }, { "model": "library_management.conditiontaggeditem", "pk": 8213, "fields": { "tag": 11, "content_object": 276 } }, { "model": "library_management.conditiontaggeditem", "pk": 8214, "fields": { "tag": 5, "content_object": 277 } }, { "model": "library_management.conditiontaggeditem", "pk": 8215, "fields": { "tag": 2, "content_object": 277 } }, { "model": "library_management.conditiontaggeditem", "pk": 8216, "fields": { "tag": 8, "content_object": 279 } }, { "model": "library_management.conditiontaggeditem", "pk": 8217, "fields": { "tag": 18, "content_object": 280 } }, { "model": "library_management.conditiontaggeditem", "pk": 8218, "fields": { "tag": 2, "content_object": 280 } }, { "model": "library_management.conditiontaggeditem", "pk": 8219, "fields": { "tag": 15, "content_object": 281 } }, { "model": "library_management.conditiontaggeditem", "pk": 8220, "fields": { "tag": 12, "content_object": 281 } }, { "model": "library_management.conditiontaggeditem", "pk": 8221, "fields": { "tag": 1, "content_object": 283 } }, { "model": "library_management.conditiontaggeditem", "pk": 8222, "fields": { "tag": 6, "content_object": 283 } }, { "model": "library_management.conditiontaggeditem", "pk": 8223, "fields": { "tag": 7, "content_object": 284 } }, { "model": "library_management.conditiontaggeditem", "pk": 8224, "fields": { "tag": 18, "content_object": 284 } }, { "model": "library_management.conditiontaggeditem", "pk": 8225, "fields": { "tag": 16, "content_object": 286 } }, { "model": "library_management.conditiontaggeditem", "pk": 8226, "fields": { "tag": 9, "content_object": 287 } }, { "model": "library_management.conditiontaggeditem", "pk": 8227, "fields": { "tag": 20, "content_object": 287 } }, { "model": "library_management.conditiontaggeditem", "pk": 8228, "fields": { "tag": 1, "content_object": 294 } }, { "model": "library_management.conditiontaggeditem", "pk": 8229, "fields": { "tag": 4, "content_object": 295 } }, { "model": "library_management.conditiontaggeditem", "pk": 8230, "fields": { "tag": 11, "content_object": 295 } }, { "model": "library_management.conditiontaggeditem", "pk": 8231, "fields": { "tag": 10, "content_object": 296 } }, { "model": "library_management.conditiontaggeditem", "pk": 8232, "fields": { "tag": 3, "content_object": 296 } }, { "model": "library_management.conditiontaggeditem", "pk": 8233, "fields": { "tag": 13, "content_object": 297 } }, { "model": "library_management.conditiontaggeditem", "pk": 8234, "fields": { "tag": 12, "content_object": 298 } }, { "model": "library_management.conditiontaggeditem", "pk": 8235, "fields": { "tag": 6, "content_object": 299 } }, { "model": "library_management.conditiontaggeditem", "pk": 8236, "fields": { "tag": 13, "content_object": 300 } }, { "model": "library_management.conditiontaggeditem", "pk": 8237, "fields": { "tag": 12, "content_object": 300 } }, { "model": "library_management.conditiontaggeditem", "pk": 8238, "fields": { "tag": 4, "content_object": 305 } }, { "model": "library_management.conditiontaggeditem", "pk": 8239, "fields": { "tag": 3, "content_object": 305 } }, { "model": "library_management.conditiontaggeditem", "pk": 8240, "fields": { "tag": 14, "content_object": 306 } }, { "model": "library_management.conditiontaggeditem", "pk": 8241, "fields": { "tag": 5, "content_object": 306 } }, { "model": "library_management.conditiontaggeditem", "pk": 8242, "fields": { "tag": 5, "content_object": 307 } }, { "model": "library_management.conditiontaggeditem", "pk": 8243, "fields": { "tag": 18, "content_object": 308 } }, { "model": "library_management.conditiontaggeditem", "pk": 8244, "fields": { "tag": 11, "content_object": 308 } }, { "model": "library_management.conditiontaggeditem", "pk": 8245, "fields": { "tag": 13, "content_object": 309 } }, { "model": "library_management.conditiontaggeditem", "pk": 8246, "fields": { "tag": 7, "content_object": 309 } }, { "model": "library_management.conditiontaggeditem", "pk": 8247, "fields": { "tag": 3, "content_object": 311 } }, { "model": "library_management.conditiontaggeditem", "pk": 8248, "fields": { "tag": 8, "content_object": 313 } }, { "model": "library_management.conditiontaggeditem", "pk": 8249, "fields": { "tag": 20, "content_object": 313 } }, { "model": "library_management.conditiontaggeditem", "pk": 8250, "fields": { "tag": 18, "content_object": 314 } }, { "model": "library_management.conditiontaggeditem", "pk": 8251, "fields": { "tag": 10, "content_object": 314 } }, { "model": "library_management.conditiontaggeditem", "pk": 8252, "fields": { "tag": 8, "content_object": 315 } }, { "model": "library_management.conditiontaggeditem", "pk": 8253, "fields": { "tag": 11, "content_object": 315 } }, { "model": "library_management.conditiontaggeditem", "pk": 8254, "fields": { "tag": 15, "content_object": 316 } }, { "model": "library_management.conditiontaggeditem", "pk": 8255, "fields": { "tag": 6, "content_object": 317 } }, { "model": "library_management.conditiontaggeditem", "pk": 8256, "fields": { "tag": 18, "content_object": 317 } }, { "model": "library_management.conditiontaggeditem", "pk": 8257, "fields": { "tag": 8, "content_object": 319 } }, { "model": "library_management.conditiontaggeditem", "pk": 8258, "fields": { "tag": 2, "content_object": 319 } }, { "model": "library_management.conditiontaggeditem", "pk": 8259, "fields": { "tag": 6, "content_object": 321 } }, { "model": "library_management.conditiontaggeditem", "pk": 8260, "fields": { "tag": 13, "content_object": 323 } }, { "model": "library_management.conditiontaggeditem", "pk": 8261, "fields": { "tag": 11, "content_object": 323 } }, { "model": "library_management.conditiontaggeditem", "pk": 8262, "fields": { "tag": 1, "content_object": 324 } }, { "model": "library_management.conditiontaggeditem", "pk": 8263, "fields": { "tag": 17, "content_object": 324 } }, { "model": "library_management.conditiontaggeditem", "pk": 8264, "fields": { "tag": 11, "content_object": 325 } }, { "model": "library_management.conditiontaggeditem", "pk": 8265, "fields": { "tag": 17, "content_object": 327 } }, { "model": "library_management.conditiontaggeditem", "pk": 8266, "fields": { "tag": 2, "content_object": 329 } }, { "model": "library_management.conditiontaggeditem", "pk": 8267, "fields": { "tag": 7, "content_object": 330 } }, { "model": "library_management.conditiontaggeditem", "pk": 8268, "fields": { "tag": 12, "content_object": 332 } }, { "model": "library_management.conditiontaggeditem", "pk": 8269, "fields": { "tag": 10, "content_object": 334 } }, { "model": "library_management.conditiontaggeditem", "pk": 8270, "fields": { "tag": 11, "content_object": 335 } }, { "model": "library_management.conditiontaggeditem", "pk": 8271, "fields": { "tag": 17, "content_object": 335 } }, { "model": "library_management.conditiontaggeditem", "pk": 8272, "fields": { "tag": 18, "content_object": 337 } }, { "model": "library_management.conditiontaggeditem", "pk": 8273, "fields": { "tag": 12, "content_object": 341 } }, { "model": "library_management.conditiontaggeditem", "pk": 8274, "fields": { "tag": 12, "content_object": 342 } }, { "model": "library_management.conditiontaggeditem", "pk": 8275, "fields": { "tag": 10, "content_object": 342 } }, { "model": "library_management.conditiontaggeditem", "pk": 8276, "fields": { "tag": 11, "content_object": 343 } }, { "model": "library_management.conditiontaggeditem", "pk": 8277, "fields": { "tag": 9, "content_object": 344 } }, { "model": "library_management.conditiontaggeditem", "pk": 8278, "fields": { "tag": 10, "content_object": 346 } }, { "model": "library_management.conditiontaggeditem", "pk": 8279, "fields": { "tag": 14, "content_object": 346 } }, { "model": "library_management.conditiontaggeditem", "pk": 8280, "fields": { "tag": 11, "content_object": 350 } }, { "model": "library_management.conditiontaggeditem", "pk": 8281, "fields": { "tag": 5, "content_object": 350 } }, { "model": "library_management.conditiontaggeditem", "pk": 8282, "fields": { "tag": 18, "content_object": 351 } }, { "model": "library_management.conditiontaggeditem", "pk": 8283, "fields": { "tag": 7, "content_object": 351 } }, { "model": "library_management.conditiontaggeditem", "pk": 8284, "fields": { "tag": 9, "content_object": 352 } }, { "model": "library_management.conditiontaggeditem", "pk": 8285, "fields": { "tag": 20, "content_object": 355 } }, { "model": "library_management.conditiontaggeditem", "pk": 8286, "fields": { "tag": 6, "content_object": 356 } }, { "model": "library_management.conditiontaggeditem", "pk": 8287, "fields": { "tag": 16, "content_object": 356 } }, { "model": "library_management.conditiontaggeditem", "pk": 8288, "fields": { "tag": 17, "content_object": 357 } }, { "model": "library_management.conditiontaggeditem", "pk": 8289, "fields": { "tag": 10, "content_object": 357 } }, { "model": "library_management.conditiontaggeditem", "pk": 8290, "fields": { "tag": 13, "content_object": 359 } }, { "model": "library_management.conditiontaggeditem", "pk": 8291, "fields": { "tag": 17, "content_object": 360 } }, { "model": "library_management.conditiontaggeditem", "pk": 8292, "fields": { "tag": 3, "content_object": 361 } }, { "model": "library_management.conditiontaggeditem", "pk": 8293, "fields": { "tag": 8, "content_object": 363 } }, { "model": "library_management.conditiontaggeditem", "pk": 8294, "fields": { "tag": 13, "content_object": 365 } }, { "model": "library_management.conditiontaggeditem", "pk": 8295, "fields": { "tag": 7, "content_object": 367 } }, { "model": "library_management.conditiontaggeditem", "pk": 8296, "fields": { "tag": 4, "content_object": 367 } }, { "model": "library_management.conditiontaggeditem", "pk": 8297, "fields": { "tag": 5, "content_object": 368 } }, { "model": "library_management.conditiontaggeditem", "pk": 8298, "fields": { "tag": 2, "content_object": 370 } }, { "model": "library_management.conditiontaggeditem", "pk": 8299, "fields": { "tag": 10, "content_object": 371 } }, { "model": "library_management.conditiontaggeditem", "pk": 8300, "fields": { "tag": 18, "content_object": 371 } }, { "model": "library_management.conditiontaggeditem", "pk": 8301, "fields": { "tag": 12, "content_object": 372 } }, { "model": "library_management.conditiontaggeditem", "pk": 8302, "fields": { "tag": 16, "content_object": 372 } }, { "model": "library_management.conditiontaggeditem", "pk": 8303, "fields": { "tag": 17, "content_object": 373 } }, { "model": "library_management.conditiontaggeditem", "pk": 8304, "fields": { "tag": 16, "content_object": 374 } }, { "model": "library_management.conditiontaggeditem", "pk": 8305, "fields": { "tag": 12, "content_object": 375 } }, { "model": "library_management.conditiontaggeditem", "pk": 8306, "fields": { "tag": 16, "content_object": 375 } }, { "model": "library_management.conditiontaggeditem", "pk": 8307, "fields": { "tag": 17, "content_object": 376 } }, { "model": "library_management.conditiontaggeditem", "pk": 8308, "fields": { "tag": 6, "content_object": 377 } }, { "model": "library_management.conditiontaggeditem", "pk": 8309, "fields": { "tag": 9, "content_object": 377 } }, { "model": "library_management.conditiontaggeditem", "pk": 8310, "fields": { "tag": 8, "content_object": 380 } }, { "model": "library_management.conditiontaggeditem", "pk": 8311, "fields": { "tag": 2, "content_object": 381 } }, { "model": "library_management.conditiontaggeditem", "pk": 8312, "fields": { "tag": 20, "content_object": 381 } }, { "model": "library_management.conditiontaggeditem", "pk": 8313, "fields": { "tag": 18, "content_object": 382 } }, { "model": "library_management.conditiontaggeditem", "pk": 8314, "fields": { "tag": 3, "content_object": 382 } }, { "model": "library_management.conditiontaggeditem", "pk": 8315, "fields": { "tag": 15, "content_object": 383 } }, { "model": "library_management.conditiontaggeditem", "pk": 8316, "fields": { "tag": 9, "content_object": 383 } }, { "model": "library_management.conditiontaggeditem", "pk": 8317, "fields": { "tag": 3, "content_object": 384 } }, { "model": "library_management.conditiontaggeditem", "pk": 8318, "fields": { "tag": 12, "content_object": 385 } }, { "model": "library_management.conditiontaggeditem", "pk": 8319, "fields": { "tag": 20, "content_object": 386 } }, { "model": "library_management.conditiontaggeditem", "pk": 8320, "fields": { "tag": 15, "content_object": 387 } }, { "model": "library_management.conditiontaggeditem", "pk": 8321, "fields": { "tag": 12, "content_object": 389 } }, { "model": "library_management.conditiontaggeditem", "pk": 8322, "fields": { "tag": 9, "content_object": 391 } }, { "model": "library_management.conditiontaggeditem", "pk": 8323, "fields": { "tag": 13, "content_object": 391 } }, { "model": "library_management.conditiontaggeditem", "pk": 8324, "fields": { "tag": 11, "content_object": 392 } }, { "model": "library_management.conditiontaggeditem", "pk": 8325, "fields": { "tag": 7, "content_object": 392 } }, { "model": "library_management.conditiontaggeditem", "pk": 8326, "fields": { "tag": 4, "content_object": 393 } }, { "model": "library_management.conditiontaggeditem", "pk": 8327, "fields": { "tag": 3, "content_object": 394 } }, { "model": "library_management.conditiontaggeditem", "pk": 8328, "fields": { "tag": 16, "content_object": 395 } }, { "model": "library_management.conditiontaggeditem", "pk": 8329, "fields": { "tag": 1, "content_object": 395 } }, { "model": "library_management.conditiontaggeditem", "pk": 8330, "fields": { "tag": 10, "content_object": 396 } }, { "model": "library_management.conditiontaggeditem", "pk": 8331, "fields": { "tag": 5, "content_object": 396 } }, { "model": "library_management.conditiontaggeditem", "pk": 8332, "fields": { "tag": 12, "content_object": 397 } }, { "model": "library_management.conditiontaggeditem", "pk": 8333, "fields": { "tag": 16, "content_object": 398 } }, { "model": "library_management.conditiontaggeditem", "pk": 8334, "fields": { "tag": 11, "content_object": 398 } }, { "model": "library_management.conditiontaggeditem", "pk": 8335, "fields": { "tag": 7, "content_object": 399 } }, { "model": "library_management.conditiontaggeditem", "pk": 8336, "fields": { "tag": 1, "content_object": 399 } }, { "model": "library_management.conditiontaggeditem", "pk": 8337, "fields": { "tag": 10, "content_object": 400 } }, { "model": "library_management.conditiontaggeditem", "pk": 8338, "fields": { "tag": 16, "content_object": 401 } }, { "model": "library_management.conditiontaggeditem", "pk": 8339, "fields": { "tag": 2, "content_object": 402 } }, { "model": "library_management.conditiontaggeditem", "pk": 8340, "fields": { "tag": 5, "content_object": 403 } }, { "model": "library_management.conditiontaggeditem", "pk": 8341, "fields": { "tag": 18, "content_object": 405 } }, { "model": "library_management.conditiontaggeditem", "pk": 8342, "fields": { "tag": 11, "content_object": 405 } }, { "model": "library_management.conditiontaggeditem", "pk": 8343, "fields": { "tag": 12, "content_object": 407 } }, { "model": "library_management.conditiontaggeditem", "pk": 8344, "fields": { "tag": 4, "content_object": 410 } }, { "model": "library_management.conditiontaggeditem", "pk": 8345, "fields": { "tag": 7, "content_object": 410 } }, { "model": "library_management.conditiontaggeditem", "pk": 8346, "fields": { "tag": 6, "content_object": 411 } }, { "model": "library_management.conditiontaggeditem", "pk": 8347, "fields": { "tag": 11, "content_object": 411 } }, { "model": "library_management.conditiontaggeditem", "pk": 8348, "fields": { "tag": 20, "content_object": 412 } }, { "model": "library_management.conditiontaggeditem", "pk": 8349, "fields": { "tag": 13, "content_object": 413 } }, { "model": "library_management.conditiontaggeditem", "pk": 8350, "fields": { "tag": 8, "content_object": 414 } }, { "model": "library_management.conditiontaggeditem", "pk": 8351, "fields": { "tag": 20, "content_object": 415 } }, { "model": "library_management.conditiontaggeditem", "pk": 8352, "fields": { "tag": 1, "content_object": 415 } }, { "model": "library_management.conditiontaggeditem", "pk": 8353, "fields": { "tag": 12, "content_object": 416 } }, { "model": "library_management.conditiontaggeditem", "pk": 8354, "fields": { "tag": 15, "content_object": 417 } }, { "model": "library_management.conditiontaggeditem", "pk": 8355, "fields": { "tag": 9, "content_object": 418 } }, { "model": "library_management.conditiontaggeditem", "pk": 8356, "fields": { "tag": 2, "content_object": 418 } }, { "model": "library_management.conditiontaggeditem", "pk": 8357, "fields": { "tag": 7, "content_object": 419 } }, { "model": "library_management.conditiontaggeditem", "pk": 8358, "fields": { "tag": 5, "content_object": 419 } }, { "model": "library_management.conditiontaggeditem", "pk": 8359, "fields": { "tag": 12, "content_object": 423 } }, { "model": "library_management.conditiontaggeditem", "pk": 8360, "fields": { "tag": 14, "content_object": 423 } }, { "model": "library_management.conditiontaggeditem", "pk": 8361, "fields": { "tag": 16, "content_object": 425 } }, { "model": "library_management.conditiontaggeditem", "pk": 8362, "fields": { "tag": 13, "content_object": 425 } }, { "model": "library_management.conditiontaggeditem", "pk": 8363, "fields": { "tag": 8, "content_object": 428 } }, { "model": "library_management.conditiontaggeditem", "pk": 8364, "fields": { "tag": 7, "content_object": 429 } }, { "model": "library_management.conditiontaggeditem", "pk": 8365, "fields": { "tag": 9, "content_object": 429 } }, { "model": "library_management.conditiontaggeditem", "pk": 8366, "fields": { "tag": 18, "content_object": 432 } }, { "model": "library_management.conditiontaggeditem", "pk": 8367, "fields": { "tag": 14, "content_object": 432 } }, { "model": "library_management.conditiontaggeditem", "pk": 8368, "fields": { "tag": 9, "content_object": 434 } }, { "model": "library_management.conditiontaggeditem", "pk": 8369, "fields": { "tag": 9, "content_object": 435 } }, { "model": "library_management.conditiontaggeditem", "pk": 8370, "fields": { "tag": 1, "content_object": 437 } }, { "model": "library_management.conditiontaggeditem", "pk": 8371, "fields": { "tag": 18, "content_object": 439 } }, { "model": "library_management.conditiontaggeditem", "pk": 8372, "fields": { "tag": 6, "content_object": 439 } }, { "model": "library_management.conditiontaggeditem", "pk": 8373, "fields": { "tag": 14, "content_object": 441 } }, { "model": "library_management.conditiontaggeditem", "pk": 8374, "fields": { "tag": 12, "content_object": 443 } }, { "model": "library_management.conditiontaggeditem", "pk": 8375, "fields": { "tag": 6, "content_object": 444 } }, { "model": "library_management.conditiontaggeditem", "pk": 8376, "fields": { "tag": 7, "content_object": 445 } }, { "model": "library_management.conditiontaggeditem", "pk": 8377, "fields": { "tag": 10, "content_object": 445 } }, { "model": "library_management.conditiontaggeditem", "pk": 8378, "fields": { "tag": 4, "content_object": 446 } }, { "model": "library_management.conditiontaggeditem", "pk": 8379, "fields": { "tag": 12, "content_object": 446 } }, { "model": "library_management.conditiontaggeditem", "pk": 8380, "fields": { "tag": 17, "content_object": 453 } }, { "model": "library_management.conditiontaggeditem", "pk": 8381, "fields": { "tag": 9, "content_object": 453 } }, { "model": "library_management.conditiontaggeditem", "pk": 8382, "fields": { "tag": 1, "content_object": 456 } }, { "model": "library_management.conditiontaggeditem", "pk": 8383, "fields": { "tag": 13, "content_object": 456 } }, { "model": "library_management.conditiontaggeditem", "pk": 8384, "fields": { "tag": 3, "content_object": 457 } }, { "model": "library_management.conditiontaggeditem", "pk": 8385, "fields": { "tag": 7, "content_object": 457 } }, { "model": "library_management.conditiontaggeditem", "pk": 8386, "fields": { "tag": 17, "content_object": 458 } }, { "model": "library_management.conditiontaggeditem", "pk": 8387, "fields": { "tag": 10, "content_object": 459 } }, { "model": "library_management.conditiontaggeditem", "pk": 8388, "fields": { "tag": 12, "content_object": 460 } }, { "model": "library_management.conditiontaggeditem", "pk": 8389, "fields": { "tag": 5, "content_object": 460 } }, { "model": "library_management.conditiontaggeditem", "pk": 8390, "fields": { "tag": 17, "content_object": 464 } }, { "model": "library_management.conditiontaggeditem", "pk": 8391, "fields": { "tag": 14, "content_object": 464 } }, { "model": "library_management.conditiontaggeditem", "pk": 8392, "fields": { "tag": 3, "content_object": 466 } }, { "model": "library_management.conditiontaggeditem", "pk": 8393, "fields": { "tag": 14, "content_object": 467 } }, { "model": "library_management.conditiontaggeditem", "pk": 8394, "fields": { "tag": 16, "content_object": 468 } }, { "model": "library_management.conditiontaggeditem", "pk": 8395, "fields": { "tag": 3, "content_object": 468 } }, { "model": "library_management.conditiontaggeditem", "pk": 8396, "fields": { "tag": 20, "content_object": 469 } }, { "model": "library_management.conditiontaggeditem", "pk": 8397, "fields": { "tag": 12, "content_object": 469 } }, { "model": "library_management.conditiontaggeditem", "pk": 8398, "fields": { "tag": 4, "content_object": 470 } }, { "model": "library_management.conditiontaggeditem", "pk": 8399, "fields": { "tag": 14, "content_object": 470 } }, { "model": "library_management.conditiontaggeditem", "pk": 8400, "fields": { "tag": 15, "content_object": 471 } }, { "model": "library_management.conditiontaggeditem", "pk": 8401, "fields": { "tag": 16, "content_object": 472 } }, { "model": "library_management.conditiontaggeditem", "pk": 8402, "fields": { "tag": 15, "content_object": 472 } }, { "model": "library_management.conditiontaggeditem", "pk": 8403, "fields": { "tag": 2, "content_object": 474 } }, { "model": "library_management.conditiontaggeditem", "pk": 8404, "fields": { "tag": 2, "content_object": 475 } }, { "model": "library_management.conditiontaggeditem", "pk": 8405, "fields": { "tag": 16, "content_object": 475 } }, { "model": "library_management.conditiontaggeditem", "pk": 8406, "fields": { "tag": 20, "content_object": 476 } }, { "model": "library_management.conditiontaggeditem", "pk": 8407, "fields": { "tag": 5, "content_object": 476 } }, { "model": "library_management.conditiontaggeditem", "pk": 8408, "fields": { "tag": 11, "content_object": 477 } }, { "model": "library_management.conditiontaggeditem", "pk": 8409, "fields": { "tag": 15, "content_object": 478 } }, { "model": "library_management.conditiontaggeditem", "pk": 8410, "fields": { "tag": 5, "content_object": 478 } }, { "model": "library_management.conditiontaggeditem", "pk": 8411, "fields": { "tag": 7, "content_object": 480 } }, { "model": "library_management.conditiontaggeditem", "pk": 8412, "fields": { "tag": 14, "content_object": 481 } }, { "model": "library_management.conditiontaggeditem", "pk": 8413, "fields": { "tag": 17, "content_object": 482 } }, { "model": "library_management.conditiontaggeditem", "pk": 8414, "fields": { "tag": 10, "content_object": 483 } }, { "model": "library_management.conditiontaggeditem", "pk": 8415, "fields": { "tag": 11, "content_object": 484 } }, { "model": "library_management.conditiontaggeditem", "pk": 8416, "fields": { "tag": 1, "content_object": 484 } }, { "model": "library_management.conditiontaggeditem", "pk": 8417, "fields": { "tag": 6, "content_object": 485 } }, { "model": "library_management.conditiontaggeditem", "pk": 8418, "fields": { "tag": 17, "content_object": 485 } }, { "model": "library_management.conditiontaggeditem", "pk": 8419, "fields": { "tag": 10, "content_object": 486 } }, { "model": "library_management.conditiontaggeditem", "pk": 8420, "fields": { "tag": 3, "content_object": 487 } }, { "model": "library_management.conditiontaggeditem", "pk": 8421, "fields": { "tag": 8, "content_object": 488 } }, { "model": "library_management.conditiontaggeditem", "pk": 8422, "fields": { "tag": 17, "content_object": 488 } }, { "model": "library_management.conditiontaggeditem", "pk": 8423, "fields": { "tag": 2, "content_object": 491 } }, { "model": "library_management.conditiontaggeditem", "pk": 8424, "fields": { "tag": 3, "content_object": 491 } }, { "model": "library_management.conditiontaggeditem", "pk": 8425, "fields": { "tag": 20, "content_object": 493 } }, { "model": "library_management.conditiontaggeditem", "pk": 8426, "fields": { "tag": 17, "content_object": 493 } }, { "model": "library_management.conditiontaggeditem", "pk": 8427, "fields": { "tag": 17, "content_object": 494 } }, { "model": "library_management.conditiontaggeditem", "pk": 8428, "fields": { "tag": 12, "content_object": 496 } }, { "model": "library_management.conditiontaggeditem", "pk": 8429, "fields": { "tag": 8, "content_object": 498 } }, { "model": "library_management.conditiontaggeditem", "pk": 8430, "fields": { "tag": 16, "content_object": 499 } }, { "model": "library_management.conditiontaggeditem", "pk": 8431, "fields": { "tag": 2, "content_object": 500 } }, { "model": "library_management.conditiontaggeditem", "pk": 8432, "fields": { "tag": 9, "content_object": 500 } }, { "model": "library_management.conditiontaggeditem", "pk": 8433, "fields": { "tag": 7, "content_object": 503 } }, { "model": "library_management.conditiontaggeditem", "pk": 8434, "fields": { "tag": 6, "content_object": 504 } }, { "model": "library_management.conditiontaggeditem", "pk": 8435, "fields": { "tag": 3, "content_object": 504 } }, { "model": "library_management.conditiontaggeditem", "pk": 8436, "fields": { "tag": 5, "content_object": 505 } }, { "model": "library_management.conditiontaggeditem", "pk": 8437, "fields": { "tag": 1, "content_object": 506 } }, { "model": "library_management.conditiontaggeditem", "pk": 8438, "fields": { "tag": 10, "content_object": 506 } }, { "model": "library_management.conditiontaggeditem", "pk": 8439, "fields": { "tag": 15, "content_object": 507 } }, { "model": "library_management.conditiontaggeditem", "pk": 8440, "fields": { "tag": 10, "content_object": 507 } }, { "model": "library_management.conditiontaggeditem", "pk": 8441, "fields": { "tag": 1, "content_object": 508 } }, { "model": "library_management.conditiontaggeditem", "pk": 8442, "fields": { "tag": 1, "content_object": 509 } }, { "model": "library_management.conditiontaggeditem", "pk": 8443, "fields": { "tag": 6, "content_object": 510 } }, { "model": "library_management.conditiontaggeditem", "pk": 8444, "fields": { "tag": 15, "content_object": 510 } }, { "model": "library_management.conditiontaggeditem", "pk": 8445, "fields": { "tag": 2, "content_object": 511 } }, { "model": "library_management.conditiontaggeditem", "pk": 8446, "fields": { "tag": 11, "content_object": 512 } }, { "model": "library_management.conditiontaggeditem", "pk": 8447, "fields": { "tag": 9, "content_object": 513 } }, { "model": "library_management.conditiontaggeditem", "pk": 8448, "fields": { "tag": 18, "content_object": 513 } }, { "model": "library_management.conditiontaggeditem", "pk": 8449, "fields": { "tag": 8, "content_object": 514 } }, { "model": "library_management.conditiontaggeditem", "pk": 8450, "fields": { "tag": 17, "content_object": 515 } }, { "model": "library_management.conditiontaggeditem", "pk": 8451, "fields": { "tag": 12, "content_object": 516 } }, { "model": "library_management.conditiontaggeditem", "pk": 8452, "fields": { "tag": 20, "content_object": 516 } }, { "model": "library_management.conditiontaggeditem", "pk": 8453, "fields": { "tag": 13, "content_object": 518 } }, { "model": "library_management.conditiontaggeditem", "pk": 8454, "fields": { "tag": 11, "content_object": 520 } }, { "model": "library_management.conditiontaggeditem", "pk": 8455, "fields": { "tag": 1, "content_object": 520 } }, { "model": "library_management.conditiontaggeditem", "pk": 8456, "fields": { "tag": 9, "content_object": 521 } }, { "model": "library_management.conditiontaggeditem", "pk": 8457, "fields": { "tag": 13, "content_object": 522 } }, { "model": "library_management.conditiontaggeditem", "pk": 8458, "fields": { "tag": 14, "content_object": 522 } }, { "model": "library_management.conditiontaggeditem", "pk": 8459, "fields": { "tag": 16, "content_object": 523 } }, { "model": "library_management.conditiontaggeditem", "pk": 8460, "fields": { "tag": 5, "content_object": 523 } }, { "model": "library_management.conditiontaggeditem", "pk": 8461, "fields": { "tag": 7, "content_object": 524 } }, { "model": "library_management.conditiontaggeditem", "pk": 8462, "fields": { "tag": 13, "content_object": 524 } }, { "model": "library_management.conditiontaggeditem", "pk": 8463, "fields": { "tag": 1, "content_object": 525 } }, { "model": "library_management.conditiontaggeditem", "pk": 8464, "fields": { "tag": 14, "content_object": 527 } }, { "model": "library_management.conditiontaggeditem", "pk": 8465, "fields": { "tag": 10, "content_object": 528 } }, { "model": "library_management.conditiontaggeditem", "pk": 8466, "fields": { "tag": 4, "content_object": 530 } }, { "model": "library_management.conditiontaggeditem", "pk": 8467, "fields": { "tag": 11, "content_object": 530 } }, { "model": "library_management.conditiontaggeditem", "pk": 8468, "fields": { "tag": 5, "content_object": 532 } }, { "model": "library_management.conditiontaggeditem", "pk": 8469, "fields": { "tag": 8, "content_object": 533 } }, { "model": "library_management.conditiontaggeditem", "pk": 8470, "fields": { "tag": 10, "content_object": 535 } }, { "model": "library_management.conditiontaggeditem", "pk": 8471, "fields": { "tag": 4, "content_object": 537 } }, { "model": "library_management.conditiontaggeditem", "pk": 8472, "fields": { "tag": 12, "content_object": 537 } }, { "model": "library_management.conditiontaggeditem", "pk": 8473, "fields": { "tag": 5, "content_object": 538 } }, { "model": "library_management.conditiontaggeditem", "pk": 8474, "fields": { "tag": 20, "content_object": 538 } }, { "model": "library_management.conditiontaggeditem", "pk": 8475, "fields": { "tag": 11, "content_object": 539 } }, { "model": "library_management.conditiontaggeditem", "pk": 8476, "fields": { "tag": 9, "content_object": 540 } }, { "model": "library_management.conditiontaggeditem", "pk": 8477, "fields": { "tag": 1, "content_object": 540 } }, { "model": "library_management.conditiontaggeditem", "pk": 8478, "fields": { "tag": 2, "content_object": 541 } }, { "model": "library_management.conditiontaggeditem", "pk": 8479, "fields": { "tag": 12, "content_object": 542 } }, { "model": "library_management.conditiontaggeditem", "pk": 8480, "fields": { "tag": 13, "content_object": 542 } }, { "model": "library_management.conditiontaggeditem", "pk": 8481, "fields": { "tag": 6, "content_object": 548 } }, { "model": "library_management.conditiontaggeditem", "pk": 8482, "fields": { "tag": 12, "content_object": 548 } }, { "model": "library_management.conditiontaggeditem", "pk": 8483, "fields": { "tag": 13, "content_object": 550 } }, { "model": "library_management.conditiontaggeditem", "pk": 8484, "fields": { "tag": 1, "content_object": 550 } }, { "model": "library_management.conditiontaggeditem", "pk": 8485, "fields": { "tag": 7, "content_object": 551 } }, { "model": "library_management.conditiontaggeditem", "pk": 8486, "fields": { "tag": 18, "content_object": 551 } }, { "model": "library_management.conditiontaggeditem", "pk": 8487, "fields": { "tag": 15, "content_object": 552 } }, { "model": "library_management.conditiontaggeditem", "pk": 8488, "fields": { "tag": 9, "content_object": 552 } }, { "model": "library_management.conditiontaggeditem", "pk": 8489, "fields": { "tag": 7, "content_object": 555 } }, { "model": "library_management.conditiontaggeditem", "pk": 8490, "fields": { "tag": 6, "content_object": 556 } }, { "model": "library_management.conditiontaggeditem", "pk": 8491, "fields": { "tag": 14, "content_object": 556 } }, { "model": "library_management.conditiontaggeditem", "pk": 8492, "fields": { "tag": 9, "content_object": 559 } }, { "model": "library_management.conditiontaggeditem", "pk": 8493, "fields": { "tag": 2, "content_object": 560 } }, { "model": "library_management.conditiontaggeditem", "pk": 8494, "fields": { "tag": 18, "content_object": 561 } }, { "model": "library_management.conditiontaggeditem", "pk": 8495, "fields": { "tag": 5, "content_object": 562 } }, { "model": "library_management.conditiontaggeditem", "pk": 8496, "fields": { "tag": 5, "content_object": 563 } }, { "model": "library_management.conditiontaggeditem", "pk": 8497, "fields": { "tag": 9, "content_object": 565 } }, { "model": "library_management.conditiontaggeditem", "pk": 8498, "fields": { "tag": 8, "content_object": 565 } }, { "model": "library_management.conditiontaggeditem", "pk": 8499, "fields": { "tag": 15, "content_object": 566 } }, { "model": "library_management.conditiontaggeditem", "pk": 8500, "fields": { "tag": 10, "content_object": 567 } }, { "model": "library_management.conditiontaggeditem", "pk": 8501, "fields": { "tag": 8, "content_object": 567 } }, { "model": "library_management.conditiontaggeditem", "pk": 8502, "fields": { "tag": 18, "content_object": 570 } }, { "model": "library_management.conditiontaggeditem", "pk": 8503, "fields": { "tag": 15, "content_object": 571 } }, { "model": "library_management.conditiontaggeditem", "pk": 8504, "fields": { "tag": 16, "content_object": 572 } }, { "model": "library_management.conditiontaggeditem", "pk": 8505, "fields": { "tag": 10, "content_object": 572 } }, { "model": "library_management.conditiontaggeditem", "pk": 8506, "fields": { "tag": 20, "content_object": 574 } }, { "model": "library_management.conditiontaggeditem", "pk": 8507, "fields": { "tag": 17, "content_object": 575 } }, { "model": "library_management.conditiontaggeditem", "pk": 8508, "fields": { "tag": 16, "content_object": 576 } }, { "model": "library_management.conditiontaggeditem", "pk": 8509, "fields": { "tag": 7, "content_object": 576 } }, { "model": "library_management.conditiontaggeditem", "pk": 8510, "fields": { "tag": 3, "content_object": 578 } }, { "model": "library_management.conditiontaggeditem", "pk": 8511, "fields": { "tag": 15, "content_object": 578 } }, { "model": "library_management.conditiontaggeditem", "pk": 8512, "fields": { "tag": 3, "content_object": 579 } }, { "model": "library_management.conditiontaggeditem", "pk": 8513, "fields": { "tag": 15, "content_object": 580 } }, { "model": "library_management.conditiontaggeditem", "pk": 8514, "fields": { "tag": 8, "content_object": 581 } }, { "model": "library_management.conditiontaggeditem", "pk": 8515, "fields": { "tag": 3, "content_object": 581 } }, { "model": "library_management.conditiontaggeditem", "pk": 8516, "fields": { "tag": 17, "content_object": 582 } }, { "model": "library_management.conditiontaggeditem", "pk": 8517, "fields": { "tag": 1, "content_object": 583 } }, { "model": "library_management.conditiontaggeditem", "pk": 8518, "fields": { "tag": 18, "content_object": 584 } }, { "model": "library_management.conditiontaggeditem", "pk": 8519, "fields": { "tag": 10, "content_object": 584 } }, { "model": "library_management.conditiontaggeditem", "pk": 8520, "fields": { "tag": 16, "content_object": 585 } }, { "model": "library_management.conditiontaggeditem", "pk": 8521, "fields": { "tag": 6, "content_object": 587 } }, { "model": "library_management.conditiontaggeditem", "pk": 8522, "fields": { "tag": 2, "content_object": 587 } }, { "model": "library_management.conditiontaggeditem", "pk": 8523, "fields": { "tag": 18, "content_object": 590 } }, { "model": "library_management.conditiontaggeditem", "pk": 8524, "fields": { "tag": 16, "content_object": 591 } }, { "model": "library_management.conditiontaggeditem", "pk": 8525, "fields": { "tag": 13, "content_object": 592 } }, { "model": "library_management.conditiontaggeditem", "pk": 8526, "fields": { "tag": 10, "content_object": 592 } }, { "model": "library_management.conditiontaggeditem", "pk": 8527, "fields": { "tag": 2, "content_object": 593 } }, { "model": "library_management.conditiontaggeditem", "pk": 8528, "fields": { "tag": 5, "content_object": 593 } }, { "model": "library_management.conditiontaggeditem", "pk": 8529, "fields": { "tag": 8, "content_object": 596 } }, { "model": "library_management.conditiontaggeditem", "pk": 8530, "fields": { "tag": 11, "content_object": 597 } }, { "model": "library_management.conditiontaggeditem", "pk": 8531, "fields": { "tag": 1, "content_object": 598 } }, { "model": "library_management.conditiontaggeditem", "pk": 8532, "fields": { "tag": 3, "content_object": 600 } }, { "model": "library_management.conditiontaggeditem", "pk": 8533, "fields": { "tag": 11, "content_object": 601 } }, { "model": "library_management.conditiontaggeditem", "pk": 8534, "fields": { "tag": 14, "content_object": 603 } }, { "model": "library_management.conditiontaggeditem", "pk": 8535, "fields": { "tag": 4, "content_object": 604 } }, { "model": "library_management.conditiontaggeditem", "pk": 8536, "fields": { "tag": 10, "content_object": 604 } }, { "model": "library_management.conditiontaggeditem", "pk": 8537, "fields": { "tag": 10, "content_object": 606 } }, { "model": "library_management.conditiontaggeditem", "pk": 8538, "fields": { "tag": 4, "content_object": 606 } }, { "model": "library_management.conditiontaggeditem", "pk": 8539, "fields": { "tag": 2, "content_object": 607 } }, { "model": "library_management.conditiontaggeditem", "pk": 8540, "fields": { "tag": 8, "content_object": 607 } }, { "model": "library_management.conditiontaggeditem", "pk": 8541, "fields": { "tag": 10, "content_object": 608 } }, { "model": "library_management.conditiontaggeditem", "pk": 8542, "fields": { "tag": 7, "content_object": 609 } }, { "model": "library_management.conditiontaggeditem", "pk": 8543, "fields": { "tag": 15, "content_object": 611 } }, { "model": "library_management.conditiontaggeditem", "pk": 8544, "fields": { "tag": 8, "content_object": 612 } }, { "model": "library_management.conditiontaggeditem", "pk": 8545, "fields": { "tag": 7, "content_object": 613 } }, { "model": "library_management.conditiontaggeditem", "pk": 8546, "fields": { "tag": 5, "content_object": 613 } }, { "model": "library_management.conditiontaggeditem", "pk": 8547, "fields": { "tag": 18, "content_object": 614 } }, { "model": "library_management.conditiontaggeditem", "pk": 8548, "fields": { "tag": 2, "content_object": 615 } }, { "model": "library_management.conditiontaggeditem", "pk": 8549, "fields": { "tag": 15, "content_object": 616 } }, { "model": "library_management.conditiontaggeditem", "pk": 8550, "fields": { "tag": 5, "content_object": 616 } }, { "model": "library_management.conditiontaggeditem", "pk": 8551, "fields": { "tag": 16, "content_object": 617 } }, { "model": "library_management.conditiontaggeditem", "pk": 8552, "fields": { "tag": 4, "content_object": 618 } }, { "model": "library_management.conditiontaggeditem", "pk": 8553, "fields": { "tag": 14, "content_object": 619 } }, { "model": "library_management.conditiontaggeditem", "pk": 8554, "fields": { "tag": 10, "content_object": 620 } }, { "model": "library_management.conditiontaggeditem", "pk": 8555, "fields": { "tag": 12, "content_object": 621 } }, { "model": "library_management.conditiontaggeditem", "pk": 8556, "fields": { "tag": 15, "content_object": 621 } }, { "model": "library_management.conditiontaggeditem", "pk": 8557, "fields": { "tag": 2, "content_object": 622 } }, { "model": "library_management.conditiontaggeditem", "pk": 8558, "fields": { "tag": 3, "content_object": 625 } }, { "model": "library_management.conditiontaggeditem", "pk": 8559, "fields": { "tag": 13, "content_object": 625 } }, { "model": "library_management.conditiontaggeditem", "pk": 8560, "fields": { "tag": 6, "content_object": 626 } }, { "model": "library_management.conditiontaggeditem", "pk": 8561, "fields": { "tag": 12, "content_object": 626 } }, { "model": "library_management.conditiontaggeditem", "pk": 8562, "fields": { "tag": 12, "content_object": 627 } }, { "model": "library_management.conditiontaggeditem", "pk": 8563, "fields": { "tag": 18, "content_object": 628 } }, { "model": "library_management.conditiontaggeditem", "pk": 8564, "fields": { "tag": 8, "content_object": 628 } }, { "model": "library_management.conditiontaggeditem", "pk": 8565, "fields": { "tag": 1, "content_object": 630 } }, { "model": "library_management.conditiontaggeditem", "pk": 8566, "fields": { "tag": 5, "content_object": 630 } }, { "model": "library_management.conditiontaggeditem", "pk": 8567, "fields": { "tag": 17, "content_object": 631 } }, { "model": "library_management.conditiontaggeditem", "pk": 8568, "fields": { "tag": 15, "content_object": 631 } }, { "model": "library_management.conditiontaggeditem", "pk": 8569, "fields": { "tag": 12, "content_object": 633 } }, { "model": "library_management.conditiontaggeditem", "pk": 8570, "fields": { "tag": 15, "content_object": 633 } }, { "model": "library_management.conditiontaggeditem", "pk": 8571, "fields": { "tag": 20, "content_object": 634 } }, { "model": "library_management.conditiontaggeditem", "pk": 8572, "fields": { "tag": 17, "content_object": 634 } }, { "model": "library_management.conditiontaggeditem", "pk": 8573, "fields": { "tag": 15, "content_object": 636 } }, { "model": "library_management.conditiontaggeditem", "pk": 8574, "fields": { "tag": 17, "content_object": 638 } }, { "model": "library_management.conditiontaggeditem", "pk": 8575, "fields": { "tag": 11, "content_object": 639 } }, { "model": "library_management.conditiontaggeditem", "pk": 8576, "fields": { "tag": 6, "content_object": 639 } }, { "model": "library_management.conditiontaggeditem", "pk": 8577, "fields": { "tag": 8, "content_object": 640 } }, { "model": "library_management.conditiontaggeditem", "pk": 8578, "fields": { "tag": 2, "content_object": 641 } }, { "model": "library_management.conditiontaggeditem", "pk": 8579, "fields": { "tag": 8, "content_object": 642 } }, { "model": "library_management.conditiontaggeditem", "pk": 8580, "fields": { "tag": 14, "content_object": 644 } }, { "model": "library_management.conditiontaggeditem", "pk": 8581, "fields": { "tag": 5, "content_object": 647 } }, { "model": "library_management.conditiontaggeditem", "pk": 8582, "fields": { "tag": 12, "content_object": 648 } }, { "model": "library_management.conditiontaggeditem", "pk": 8583, "fields": { "tag": 10, "content_object": 649 } }, { "model": "library_management.conditiontaggeditem", "pk": 8584, "fields": { "tag": 11, "content_object": 649 } }, { "model": "library_management.conditiontaggeditem", "pk": 8585, "fields": { "tag": 10, "content_object": 650 } }, { "model": "library_management.conditiontaggeditem", "pk": 8586, "fields": { "tag": 9, "content_object": 650 } }, { "model": "library_management.conditiontaggeditem", "pk": 8587, "fields": { "tag": 2, "content_object": 651 } }, { "model": "library_management.conditiontaggeditem", "pk": 8588, "fields": { "tag": 11, "content_object": 652 } }, { "model": "library_management.conditiontaggeditem", "pk": 8589, "fields": { "tag": 20, "content_object": 652 } }, { "model": "library_management.conditiontaggeditem", "pk": 8590, "fields": { "tag": 11, "content_object": 653 } }, { "model": "library_management.conditiontaggeditem", "pk": 8591, "fields": { "tag": 18, "content_object": 653 } }, { "model": "library_management.conditiontaggeditem", "pk": 8592, "fields": { "tag": 17, "content_object": 654 } }, { "model": "library_management.conditiontaggeditem", "pk": 8593, "fields": { "tag": 5, "content_object": 655 } }, { "model": "library_management.conditiontaggeditem", "pk": 8594, "fields": { "tag": 10, "content_object": 656 } }, { "model": "library_management.conditiontaggeditem", "pk": 8595, "fields": { "tag": 16, "content_object": 657 } }, { "model": "library_management.conditiontaggeditem", "pk": 8596, "fields": { "tag": 11, "content_object": 657 } }, { "model": "library_management.conditiontaggeditem", "pk": 8597, "fields": { "tag": 17, "content_object": 658 } }, { "model": "library_management.conditiontaggeditem", "pk": 8598, "fields": { "tag": 10, "content_object": 659 } }, { "model": "library_management.conditiontaggeditem", "pk": 8599, "fields": { "tag": 6, "content_object": 663 } }, { "model": "library_management.conditiontaggeditem", "pk": 8600, "fields": { "tag": 16, "content_object": 663 } }, { "model": "library_management.conditiontaggeditem", "pk": 8601, "fields": { "tag": 8, "content_object": 665 } }, { "model": "library_management.conditiontaggeditem", "pk": 8602, "fields": { "tag": 7, "content_object": 666 } }, { "model": "library_management.conditiontaggeditem", "pk": 8603, "fields": { "tag": 12, "content_object": 669 } }, { "model": "library_management.conditiontaggeditem", "pk": 8604, "fields": { "tag": 18, "content_object": 671 } }, { "model": "library_management.conditiontaggeditem", "pk": 8605, "fields": { "tag": 6, "content_object": 671 } }, { "model": "library_management.conditiontaggeditem", "pk": 8606, "fields": { "tag": 12, "content_object": 672 } }, { "model": "library_management.conditiontaggeditem", "pk": 8607, "fields": { "tag": 9, "content_object": 676 } }, { "model": "library_management.conditiontaggeditem", "pk": 8608, "fields": { "tag": 12, "content_object": 678 } }, { "model": "library_management.conditiontaggeditem", "pk": 8609, "fields": { "tag": 14, "content_object": 678 } }, { "model": "library_management.conditiontaggeditem", "pk": 8610, "fields": { "tag": 11, "content_object": 679 } }, { "model": "library_management.conditiontaggeditem", "pk": 8611, "fields": { "tag": 6, "content_object": 679 } }, { "model": "library_management.conditiontaggeditem", "pk": 8612, "fields": { "tag": 1, "content_object": 685 } }, { "model": "library_management.conditiontaggeditem", "pk": 8613, "fields": { "tag": 20, "content_object": 685 } }, { "model": "library_management.conditiontaggeditem", "pk": 8614, "fields": { "tag": 11, "content_object": 687 } }, { "model": "library_management.conditiontaggeditem", "pk": 8615, "fields": { "tag": 5, "content_object": 688 } }, { "model": "library_management.conditiontaggeditem", "pk": 8616, "fields": { "tag": 8, "content_object": 688 } }, { "model": "library_management.conditiontaggeditem", "pk": 8617, "fields": { "tag": 3, "content_object": 689 } }, { "model": "library_management.conditiontaggeditem", "pk": 8618, "fields": { "tag": 3, "content_object": 692 } }, { "model": "library_management.conditiontaggeditem", "pk": 8619, "fields": { "tag": 8, "content_object": 692 } }, { "model": "library_management.conditiontaggeditem", "pk": 8620, "fields": { "tag": 9, "content_object": 693 } }, { "model": "library_management.conditiontaggeditem", "pk": 8621, "fields": { "tag": 11, "content_object": 693 } }, { "model": "library_management.conditiontaggeditem", "pk": 8622, "fields": { "tag": 10, "content_object": 694 } }, { "model": "library_management.conditiontaggeditem", "pk": 8623, "fields": { "tag": 1, "content_object": 695 } }, { "model": "library_management.conditiontaggeditem", "pk": 8624, "fields": { "tag": 2, "content_object": 695 } }, { "model": "library_management.conditiontaggeditem", "pk": 8625, "fields": { "tag": 2, "content_object": 696 } }, { "model": "library_management.conditiontaggeditem", "pk": 8626, "fields": { "tag": 20, "content_object": 697 } }, { "model": "library_management.conditiontaggeditem", "pk": 8627, "fields": { "tag": 5, "content_object": 697 } }, { "model": "library_management.conditiontaggeditem", "pk": 8628, "fields": { "tag": 2, "content_object": 699 } }, { "model": "library_management.conditiontaggeditem", "pk": 8629, "fields": { "tag": 1, "content_object": 699 } }, { "model": "library_management.conditiontaggeditem", "pk": 8630, "fields": { "tag": 20, "content_object": 701 } }, { "model": "library_management.conditiontaggeditem", "pk": 8631, "fields": { "tag": 1, "content_object": 703 } }, { "model": "library_management.conditiontaggeditem", "pk": 8632, "fields": { "tag": 12, "content_object": 703 } }, { "model": "library_management.conditiontaggeditem", "pk": 8633, "fields": { "tag": 7, "content_object": 705 } }, { "model": "library_management.conditiontaggeditem", "pk": 8634, "fields": { "tag": 4, "content_object": 705 } }, { "model": "library_management.conditiontaggeditem", "pk": 8635, "fields": { "tag": 16, "content_object": 706 } }, { "model": "library_management.conditiontaggeditem", "pk": 8636, "fields": { "tag": 9, "content_object": 706 } }, { "model": "library_management.conditiontaggeditem", "pk": 8637, "fields": { "tag": 10, "content_object": 707 } }, { "model": "library_management.conditiontaggeditem", "pk": 8638, "fields": { "tag": 12, "content_object": 707 } }, { "model": "library_management.conditiontaggeditem", "pk": 8639, "fields": { "tag": 1, "content_object": 709 } }, { "model": "library_management.conditiontaggeditem", "pk": 8640, "fields": { "tag": 5, "content_object": 710 } }, { "model": "library_management.conditiontaggeditem", "pk": 8641, "fields": { "tag": 10, "content_object": 712 } }, { "model": "library_management.conditiontaggeditem", "pk": 8642, "fields": { "tag": 2, "content_object": 712 } }, { "model": "library_management.conditiontaggeditem", "pk": 8643, "fields": { "tag": 18, "content_object": 713 } }, { "model": "library_management.conditiontaggeditem", "pk": 8644, "fields": { "tag": 14, "content_object": 714 } }, { "model": "library_management.conditiontaggeditem", "pk": 8645, "fields": { "tag": 17, "content_object": 716 } }, { "model": "library_management.conditiontaggeditem", "pk": 8646, "fields": { "tag": 18, "content_object": 716 } }, { "model": "library_management.conditiontaggeditem", "pk": 8647, "fields": { "tag": 2, "content_object": 717 } }, { "model": "library_management.conditiontaggeditem", "pk": 8648, "fields": { "tag": 4, "content_object": 720 } }, { "model": "library_management.conditiontaggeditem", "pk": 8649, "fields": { "tag": 18, "content_object": 720 } }, { "model": "library_management.conditiontaggeditem", "pk": 8650, "fields": { "tag": 20, "content_object": 721 } }, { "model": "library_management.conditiontaggeditem", "pk": 8651, "fields": { "tag": 7, "content_object": 721 } }, { "model": "library_management.conditiontaggeditem", "pk": 8652, "fields": { "tag": 3, "content_object": 722 } }, { "model": "library_management.conditiontaggeditem", "pk": 8653, "fields": { "tag": 9, "content_object": 723 } }, { "model": "library_management.conditiontaggeditem", "pk": 8654, "fields": { "tag": 17, "content_object": 724 } }, { "model": "library_management.conditiontaggeditem", "pk": 8655, "fields": { "tag": 14, "content_object": 725 } }, { "model": "library_management.conditiontaggeditem", "pk": 8656, "fields": { "tag": 5, "content_object": 725 } }, { "model": "library_management.conditiontaggeditem", "pk": 8657, "fields": { "tag": 13, "content_object": 726 } }, { "model": "library_management.conditiontaggeditem", "pk": 8658, "fields": { "tag": 18, "content_object": 726 } }, { "model": "library_management.conditiontaggeditem", "pk": 8659, "fields": { "tag": 15, "content_object": 727 } }, { "model": "library_management.conditiontaggeditem", "pk": 8660, "fields": { "tag": 10, "content_object": 727 } }, { "model": "library_management.conditiontaggeditem", "pk": 8661, "fields": { "tag": 14, "content_object": 728 } }, { "model": "library_management.conditiontaggeditem", "pk": 8662, "fields": { "tag": 4, "content_object": 728 } }, { "model": "library_management.conditiontaggeditem", "pk": 8663, "fields": { "tag": 9, "content_object": 730 } }, { "model": "library_management.conditiontaggeditem", "pk": 8664, "fields": { "tag": 2, "content_object": 730 } }, { "model": "library_management.conditiontaggeditem", "pk": 8665, "fields": { "tag": 9, "content_object": 734 } }, { "model": "library_management.conditiontaggeditem", "pk": 8666, "fields": { "tag": 11, "content_object": 734 } }, { "model": "library_management.conditiontaggeditem", "pk": 8667, "fields": { "tag": 7, "content_object": 736 } }, { "model": "library_management.conditiontaggeditem", "pk": 8668, "fields": { "tag": 12, "content_object": 736 } }, { "model": "library_management.conditiontaggeditem", "pk": 8669, "fields": { "tag": 14, "content_object": 737 } }, { "model": "library_management.conditiontaggeditem", "pk": 8670, "fields": { "tag": 20, "content_object": 737 } }, { "model": "library_management.conditiontaggeditem", "pk": 8671, "fields": { "tag": 20, "content_object": 738 } }, { "model": "library_management.conditiontaggeditem", "pk": 8672, "fields": { "tag": 14, "content_object": 738 } }, { "model": "library_management.conditiontaggeditem", "pk": 8673, "fields": { "tag": 1, "content_object": 740 } }, { "model": "library_management.conditiontaggeditem", "pk": 8674, "fields": { "tag": 20, "content_object": 740 } }, { "model": "library_management.conditiontaggeditem", "pk": 8675, "fields": { "tag": 8, "content_object": 742 } }, { "model": "library_management.conditiontaggeditem", "pk": 8676, "fields": { "tag": 5, "content_object": 742 } }, { "model": "library_management.conditiontaggeditem", "pk": 8677, "fields": { "tag": 11, "content_object": 743 } }, { "model": "library_management.conditiontaggeditem", "pk": 8678, "fields": { "tag": 15, "content_object": 743 } }, { "model": "library_management.conditiontaggeditem", "pk": 8679, "fields": { "tag": 5, "content_object": 744 } }, { "model": "library_management.conditiontaggeditem", "pk": 8680, "fields": { "tag": 8, "content_object": 744 } }, { "model": "library_management.conditiontaggeditem", "pk": 8681, "fields": { "tag": 15, "content_object": 746 } }, { "model": "library_management.conditiontaggeditem", "pk": 8682, "fields": { "tag": 18, "content_object": 746 } }, { "model": "library_management.conditiontaggeditem", "pk": 8683, "fields": { "tag": 8, "content_object": 747 } }, { "model": "library_management.conditiontaggeditem", "pk": 8684, "fields": { "tag": 18, "content_object": 747 } }, { "model": "library_management.conditiontaggeditem", "pk": 8685, "fields": { "tag": 12, "content_object": 748 } }, { "model": "library_management.conditiontaggeditem", "pk": 8686, "fields": { "tag": 5, "content_object": 748 } }, { "model": "library_management.conditiontaggeditem", "pk": 8687, "fields": { "tag": 14, "content_object": 750 } }, { "model": "library_management.conditiontaggeditem", "pk": 8688, "fields": { "tag": 20, "content_object": 750 } }, { "model": "library_management.conditiontaggeditem", "pk": 8689, "fields": { "tag": 5, "content_object": 751 } }, { "model": "library_management.conditiontaggeditem", "pk": 8690, "fields": { "tag": 6, "content_object": 752 } }, { "model": "library_management.conditiontaggeditem", "pk": 8691, "fields": { "tag": 17, "content_object": 753 } }, { "model": "library_management.conditiontaggeditem", "pk": 8692, "fields": { "tag": 16, "content_object": 754 } }, { "model": "library_management.conditiontaggeditem", "pk": 8693, "fields": { "tag": 2, "content_object": 754 } }, { "model": "library_management.conditiontaggeditem", "pk": 8694, "fields": { "tag": 8, "content_object": 755 } }, { "model": "library_management.conditiontaggeditem", "pk": 8695, "fields": { "tag": 6, "content_object": 755 } }, { "model": "library_management.conditiontaggeditem", "pk": 8696, "fields": { "tag": 2, "content_object": 756 } }, { "model": "library_management.conditiontaggeditem", "pk": 8697, "fields": { "tag": 8, "content_object": 757 } }, { "model": "library_management.conditiontaggeditem", "pk": 8698, "fields": { "tag": 9, "content_object": 758 } }, { "model": "library_management.conditiontaggeditem", "pk": 8699, "fields": { "tag": 13, "content_object": 758 } }, { "model": "library_management.conditiontaggeditem", "pk": 8700, "fields": { "tag": 5, "content_object": 762 } }, { "model": "library_management.conditiontaggeditem", "pk": 8701, "fields": { "tag": 13, "content_object": 762 } }, { "model": "library_management.conditiontaggeditem", "pk": 8702, "fields": { "tag": 11, "content_object": 763 } }, { "model": "library_management.conditiontaggeditem", "pk": 8703, "fields": { "tag": 18, "content_object": 763 } }, { "model": "library_management.conditiontaggeditem", "pk": 8704, "fields": { "tag": 3, "content_object": 764 } }, { "model": "library_management.conditiontaggeditem", "pk": 8705, "fields": { "tag": 18, "content_object": 765 } }, { "model": "library_management.conditiontaggeditem", "pk": 8706, "fields": { "tag": 9, "content_object": 767 } }, { "model": "library_management.conditiontaggeditem", "pk": 8707, "fields": { "tag": 5, "content_object": 770 } }, { "model": "library_management.conditiontaggeditem", "pk": 8708, "fields": { "tag": 18, "content_object": 771 } }, { "model": "library_management.conditiontaggeditem", "pk": 8709, "fields": { "tag": 6, "content_object": 771 } }, { "model": "library_management.conditiontaggeditem", "pk": 8710, "fields": { "tag": 8, "content_object": 773 } }, { "model": "library_management.conditiontaggeditem", "pk": 8711, "fields": { "tag": 2, "content_object": 773 } }, { "model": "library_management.conditiontaggeditem", "pk": 8712, "fields": { "tag": 4, "content_object": 774 } }, { "model": "library_management.conditiontaggeditem", "pk": 8713, "fields": { "tag": 16, "content_object": 775 } }, { "model": "library_management.conditiontaggeditem", "pk": 8714, "fields": { "tag": 15, "content_object": 778 } }, { "model": "library_management.conditiontaggeditem", "pk": 8715, "fields": { "tag": 17, "content_object": 778 } }, { "model": "library_management.conditiontaggeditem", "pk": 8716, "fields": { "tag": 9, "content_object": 779 } }, { "model": "library_management.conditiontaggeditem", "pk": 8717, "fields": { "tag": 2, "content_object": 779 } }, { "model": "library_management.conditiontaggeditem", "pk": 8718, "fields": { "tag": 13, "content_object": 780 } }, { "model": "library_management.conditiontaggeditem", "pk": 8719, "fields": { "tag": 7, "content_object": 780 } }, { "model": "library_management.conditiontaggeditem", "pk": 8720, "fields": { "tag": 9, "content_object": 781 } }, { "model": "library_management.conditiontaggeditem", "pk": 8721, "fields": { "tag": 6, "content_object": 782 } }, { "model": "library_management.conditiontaggeditem", "pk": 8722, "fields": { "tag": 5, "content_object": 783 } }, { "model": "library_management.conditiontaggeditem", "pk": 8723, "fields": { "tag": 4, "content_object": 784 } }, { "model": "library_management.conditiontaggeditem", "pk": 8724, "fields": { "tag": 5, "content_object": 784 } }, { "model": "library_management.conditiontaggeditem", "pk": 8725, "fields": { "tag": 5, "content_object": 785 } }, { "model": "library_management.conditiontaggeditem", "pk": 8726, "fields": { "tag": 4, "content_object": 786 } }, { "model": "library_management.conditiontaggeditem", "pk": 8727, "fields": { "tag": 13, "content_object": 787 } }, { "model": "library_management.conditiontaggeditem", "pk": 8728, "fields": { "tag": 11, "content_object": 788 } }, { "model": "library_management.conditiontaggeditem", "pk": 8729, "fields": { "tag": 1, "content_object": 789 } }, { "model": "library_management.conditiontaggeditem", "pk": 8730, "fields": { "tag": 17, "content_object": 791 } }, { "model": "library_management.conditiontaggeditem", "pk": 8731, "fields": { "tag": 11, "content_object": 791 } }, { "model": "library_management.conditiontaggeditem", "pk": 8732, "fields": { "tag": 6, "content_object": 793 } }, { "model": "library_management.conditiontaggeditem", "pk": 8733, "fields": { "tag": 18, "content_object": 793 } }, { "model": "library_management.conditiontaggeditem", "pk": 8734, "fields": { "tag": 9, "content_object": 794 } }, { "model": "library_management.conditiontaggeditem", "pk": 8735, "fields": { "tag": 17, "content_object": 794 } }, { "model": "library_management.conditiontaggeditem", "pk": 8736, "fields": { "tag": 5, "content_object": 795 } }, { "model": "library_management.conditiontaggeditem", "pk": 8737, "fields": { "tag": 17, "content_object": 795 } }, { "model": "library_management.conditiontaggeditem", "pk": 8738, "fields": { "tag": 8, "content_object": 796 } }, { "model": "library_management.conditiontaggeditem", "pk": 8739, "fields": { "tag": 18, "content_object": 797 } }, { "model": "library_management.conditiontaggeditem", "pk": 8740, "fields": { "tag": 3, "content_object": 797 } }, { "model": "library_management.conditiontaggeditem", "pk": 8741, "fields": { "tag": 15, "content_object": 798 } }, { "model": "library_management.conditiontaggeditem", "pk": 8742, "fields": { "tag": 16, "content_object": 801 } }, { "model": "library_management.conditiontaggeditem", "pk": 8743, "fields": { "tag": 18, "content_object": 801 } }, { "model": "library_management.conditiontaggeditem", "pk": 8744, "fields": { "tag": 6, "content_object": 803 } }, { "model": "library_management.conditiontaggeditem", "pk": 8745, "fields": { "tag": 3, "content_object": 804 } }, { "model": "library_management.conditiontaggeditem", "pk": 8746, "fields": { "tag": 20, "content_object": 804 } }, { "model": "library_management.conditiontaggeditem", "pk": 8747, "fields": { "tag": 16, "content_object": 805 } }, { "model": "library_management.conditiontaggeditem", "pk": 8748, "fields": { "tag": 8, "content_object": 806 } }, { "model": "library_management.conditiontaggeditem", "pk": 8749, "fields": { "tag": 9, "content_object": 806 } }, { "model": "library_management.conditiontaggeditem", "pk": 8750, "fields": { "tag": 14, "content_object": 807 } }, { "model": "library_management.conditiontaggeditem", "pk": 8751, "fields": { "tag": 4, "content_object": 807 } }, { "model": "library_management.conditiontaggeditem", "pk": 8752, "fields": { "tag": 20, "content_object": 808 } }, { "model": "library_management.conditiontaggeditem", "pk": 8753, "fields": { "tag": 18, "content_object": 810 } }, { "model": "library_management.conditiontaggeditem", "pk": 8754, "fields": { "tag": 7, "content_object": 810 } }, { "model": "library_management.conditiontaggeditem", "pk": 8755, "fields": { "tag": 11, "content_object": 811 } }, { "model": "library_management.conditiontaggeditem", "pk": 8756, "fields": { "tag": 3, "content_object": 812 } }, { "model": "library_management.conditiontaggeditem", "pk": 8757, "fields": { "tag": 1, "content_object": 814 } }, { "model": "library_management.conditiontaggeditem", "pk": 8758, "fields": { "tag": 7, "content_object": 815 } }, { "model": "library_management.conditiontaggeditem", "pk": 8759, "fields": { "tag": 3, "content_object": 815 } }, { "model": "library_management.conditiontaggeditem", "pk": 8760, "fields": { "tag": 9, "content_object": 816 } }, { "model": "library_management.conditiontaggeditem", "pk": 8761, "fields": { "tag": 17, "content_object": 817 } }, { "model": "library_management.conditiontaggeditem", "pk": 8762, "fields": { "tag": 5, "content_object": 820 } }, { "model": "library_management.conditiontaggeditem", "pk": 8763, "fields": { "tag": 8, "content_object": 820 } }, { "model": "library_management.conditiontaggeditem", "pk": 8764, "fields": { "tag": 13, "content_object": 821 } }, { "model": "library_management.conditiontaggeditem", "pk": 8765, "fields": { "tag": 2, "content_object": 821 } }, { "model": "library_management.conditiontaggeditem", "pk": 8766, "fields": { "tag": 5, "content_object": 823 } }, { "model": "library_management.conditiontaggeditem", "pk": 8767, "fields": { "tag": 7, "content_object": 824 } }, { "model": "library_management.conditiontaggeditem", "pk": 8768, "fields": { "tag": 12, "content_object": 824 } }, { "model": "library_management.conditiontaggeditem", "pk": 8769, "fields": { "tag": 11, "content_object": 825 } }, { "model": "library_management.conditiontaggeditem", "pk": 8770, "fields": { "tag": 4, "content_object": 826 } }, { "model": "library_management.conditiontaggeditem", "pk": 8771, "fields": { "tag": 9, "content_object": 827 } }, { "model": "library_management.conditiontaggeditem", "pk": 8772, "fields": { "tag": 17, "content_object": 828 } }, { "model": "library_management.conditiontaggeditem", "pk": 8773, "fields": { "tag": 10, "content_object": 836 } }, { "model": "library_management.conditiontaggeditem", "pk": 8774, "fields": { "tag": 9, "content_object": 837 } }, { "model": "library_management.conditiontaggeditem", "pk": 8775, "fields": { "tag": 3, "content_object": 838 } }, { "model": "library_management.conditiontaggeditem", "pk": 8776, "fields": { "tag": 13, "content_object": 838 } }, { "model": "library_management.conditiontaggeditem", "pk": 8777, "fields": { "tag": 2, "content_object": 839 } }, { "model": "library_management.conditiontaggeditem", "pk": 8778, "fields": { "tag": 12, "content_object": 839 } }, { "model": "library_management.conditiontaggeditem", "pk": 8779, "fields": { "tag": 3, "content_object": 841 } }, { "model": "library_management.conditiontaggeditem", "pk": 8780, "fields": { "tag": 1, "content_object": 842 } }, { "model": "library_management.conditiontaggeditem", "pk": 8781, "fields": { "tag": 16, "content_object": 843 } }, { "model": "library_management.conditiontaggeditem", "pk": 8782, "fields": { "tag": 14, "content_object": 845 } }, { "model": "library_management.conditiontaggeditem", "pk": 8783, "fields": { "tag": 12, "content_object": 845 } }, { "model": "library_management.conditiontaggeditem", "pk": 8784, "fields": { "tag": 5, "content_object": 847 } }, { "model": "library_management.conditiontaggeditem", "pk": 8785, "fields": { "tag": 2, "content_object": 848 } }, { "model": "library_management.conditiontaggeditem", "pk": 8786, "fields": { "tag": 10, "content_object": 848 } }, { "model": "library_management.conditiontaggeditem", "pk": 8787, "fields": { "tag": 8, "content_object": 849 } }, { "model": "library_management.conditiontaggeditem", "pk": 8788, "fields": { "tag": 18, "content_object": 850 } }, { "model": "library_management.conditiontaggeditem", "pk": 8789, "fields": { "tag": 11, "content_object": 851 } }, { "model": "library_management.conditiontaggeditem", "pk": 8790, "fields": { "tag": 17, "content_object": 853 } }, { "model": "library_management.conditiontaggeditem", "pk": 8791, "fields": { "tag": 9, "content_object": 854 } }, { "model": "library_management.conditiontaggeditem", "pk": 8792, "fields": { "tag": 15, "content_object": 854 } }, { "model": "library_management.conditiontaggeditem", "pk": 8793, "fields": { "tag": 7, "content_object": 856 } }, { "model": "library_management.conditiontaggeditem", "pk": 8794, "fields": { "tag": 15, "content_object": 856 } }, { "model": "library_management.conditiontaggeditem", "pk": 8795, "fields": { "tag": 18, "content_object": 857 } }, { "model": "library_management.conditiontaggeditem", "pk": 8796, "fields": { "tag": 4, "content_object": 857 } }, { "model": "library_management.conditiontaggeditem", "pk": 8797, "fields": { "tag": 8, "content_object": 859 } }, { "model": "library_management.conditiontaggeditem", "pk": 8798, "fields": { "tag": 14, "content_object": 859 } }, { "model": "library_management.conditiontaggeditem", "pk": 8799, "fields": { "tag": 16, "content_object": 861 } }, { "model": "library_management.conditiontaggeditem", "pk": 8800, "fields": { "tag": 15, "content_object": 861 } }, { "model": "library_management.conditiontaggeditem", "pk": 8801, "fields": { "tag": 6, "content_object": 862 } }, { "model": "library_management.conditiontaggeditem", "pk": 8802, "fields": { "tag": 6, "content_object": 863 } }, { "model": "library_management.conditiontaggeditem", "pk": 8803, "fields": { "tag": 16, "content_object": 863 } }, { "model": "library_management.conditiontaggeditem", "pk": 8804, "fields": { "tag": 18, "content_object": 866 } }, { "model": "library_management.conditiontaggeditem", "pk": 8805, "fields": { "tag": 12, "content_object": 866 } }, { "model": "library_management.conditiontaggeditem", "pk": 8806, "fields": { "tag": 10, "content_object": 867 } }, { "model": "library_management.conditiontaggeditem", "pk": 8807, "fields": { "tag": 17, "content_object": 867 } }, { "model": "library_management.conditiontaggeditem", "pk": 8808, "fields": { "tag": 18, "content_object": 869 } }, { "model": "library_management.conditiontaggeditem", "pk": 8809, "fields": { "tag": 2, "content_object": 869 } }, { "model": "library_management.conditiontaggeditem", "pk": 8810, "fields": { "tag": 4, "content_object": 870 } }, { "model": "library_management.conditiontaggeditem", "pk": 8811, "fields": { "tag": 2, "content_object": 871 } }, { "model": "library_management.conditiontaggeditem", "pk": 8812, "fields": { "tag": 9, "content_object": 871 } }, { "model": "library_management.conditiontaggeditem", "pk": 8813, "fields": { "tag": 5, "content_object": 872 } }, { "model": "library_management.conditiontaggeditem", "pk": 8814, "fields": { "tag": 18, "content_object": 875 } }, { "model": "library_management.conditiontaggeditem", "pk": 8815, "fields": { "tag": 20, "content_object": 877 } }, { "model": "library_management.conditiontaggeditem", "pk": 8816, "fields": { "tag": 13, "content_object": 877 } }, { "model": "library_management.conditiontaggeditem", "pk": 8817, "fields": { "tag": 13, "content_object": 878 } }, { "model": "library_management.conditiontaggeditem", "pk": 8818, "fields": { "tag": 9, "content_object": 878 } }, { "model": "library_management.conditiontaggeditem", "pk": 8819, "fields": { "tag": 20, "content_object": 879 } }, { "model": "library_management.conditiontaggeditem", "pk": 8820, "fields": { "tag": 10, "content_object": 879 } }, { "model": "library_management.conditiontaggeditem", "pk": 8821, "fields": { "tag": 16, "content_object": 880 } }, { "model": "library_management.conditiontaggeditem", "pk": 8822, "fields": { "tag": 7, "content_object": 881 } }, { "model": "library_management.conditiontaggeditem", "pk": 8823, "fields": { "tag": 11, "content_object": 881 } }, { "model": "library_management.conditiontaggeditem", "pk": 8824, "fields": { "tag": 20, "content_object": 882 } }, { "model": "library_management.conditiontaggeditem", "pk": 8825, "fields": { "tag": 20, "content_object": 883 } }, { "model": "library_management.conditiontaggeditem", "pk": 8826, "fields": { "tag": 4, "content_object": 883 } }, { "model": "library_management.conditiontaggeditem", "pk": 8827, "fields": { "tag": 2, "content_object": 884 } }, { "model": "library_management.conditiontaggeditem", "pk": 8828, "fields": { "tag": 6, "content_object": 885 } }, { "model": "library_management.conditiontaggeditem", "pk": 8829, "fields": { "tag": 12, "content_object": 886 } }, { "model": "library_management.conditiontaggeditem", "pk": 8830, "fields": { "tag": 6, "content_object": 886 } }, { "model": "library_management.conditiontaggeditem", "pk": 8831, "fields": { "tag": 3, "content_object": 887 } }, { "model": "library_management.conditiontaggeditem", "pk": 8832, "fields": { "tag": 12, "content_object": 887 } }, { "model": "library_management.conditiontaggeditem", "pk": 8833, "fields": { "tag": 5, "content_object": 888 } }, { "model": "library_management.conditiontaggeditem", "pk": 8834, "fields": { "tag": 4, "content_object": 888 } }, { "model": "library_management.conditiontaggeditem", "pk": 8835, "fields": { "tag": 2, "content_object": 889 } }, { "model": "library_management.conditiontaggeditem", "pk": 8836, "fields": { "tag": 10, "content_object": 889 } }, { "model": "library_management.conditiontaggeditem", "pk": 8837, "fields": { "tag": 10, "content_object": 890 } }, { "model": "library_management.conditiontaggeditem", "pk": 8838, "fields": { "tag": 8, "content_object": 891 } }, { "model": "library_management.conditiontaggeditem", "pk": 8839, "fields": { "tag": 18, "content_object": 891 } }, { "model": "library_management.conditiontaggeditem", "pk": 8840, "fields": { "tag": 8, "content_object": 892 } }, { "model": "library_management.conditiontaggeditem", "pk": 8841, "fields": { "tag": 16, "content_object": 893 } }, { "model": "library_management.conditiontaggeditem", "pk": 8842, "fields": { "tag": 7, "content_object": 893 } }, { "model": "library_management.conditiontaggeditem", "pk": 8843, "fields": { "tag": 6, "content_object": 895 } }, { "model": "library_management.conditiontaggeditem", "pk": 8844, "fields": { "tag": 2, "content_object": 895 } }, { "model": "library_management.conditiontaggeditem", "pk": 8845, "fields": { "tag": 20, "content_object": 897 } }, { "model": "library_management.conditiontaggeditem", "pk": 8846, "fields": { "tag": 2, "content_object": 898 } }, { "model": "library_management.conditiontaggeditem", "pk": 8847, "fields": { "tag": 9, "content_object": 899 } }, { "model": "library_management.conditiontaggeditem", "pk": 8848, "fields": { "tag": 11, "content_object": 902 } }, { "model": "library_management.conditiontaggeditem", "pk": 8849, "fields": { "tag": 11, "content_object": 903 } }, { "model": "library_management.conditiontaggeditem", "pk": 8850, "fields": { "tag": 15, "content_object": 904 } }, { "model": "library_management.conditiontaggeditem", "pk": 8851, "fields": { "tag": 7, "content_object": 904 } }, { "model": "library_management.conditiontaggeditem", "pk": 8852, "fields": { "tag": 7, "content_object": 906 } }, { "model": "library_management.conditiontaggeditem", "pk": 8853, "fields": { "tag": 9, "content_object": 908 } }, { "model": "library_management.conditiontaggeditem", "pk": 8854, "fields": { "tag": 11, "content_object": 910 } }, { "model": "library_management.conditiontaggeditem", "pk": 8855, "fields": { "tag": 8, "content_object": 910 } }, { "model": "library_management.conditiontaggeditem", "pk": 8856, "fields": { "tag": 18, "content_object": 914 } }, { "model": "library_management.conditiontaggeditem", "pk": 8857, "fields": { "tag": 17, "content_object": 914 } }, { "model": "library_management.conditiontaggeditem", "pk": 8858, "fields": { "tag": 10, "content_object": 916 } }, { "model": "library_management.conditiontaggeditem", "pk": 8859, "fields": { "tag": 6, "content_object": 916 } }, { "model": "library_management.conditiontaggeditem", "pk": 8860, "fields": { "tag": 1, "content_object": 917 } }, { "model": "library_management.conditiontaggeditem", "pk": 8861, "fields": { "tag": 9, "content_object": 917 } }, { "model": "library_management.conditiontaggeditem", "pk": 8862, "fields": { "tag": 13, "content_object": 920 } }, { "model": "library_management.conditiontaggeditem", "pk": 8863, "fields": { "tag": 3, "content_object": 921 } }, { "model": "library_management.conditiontaggeditem", "pk": 8864, "fields": { "tag": 9, "content_object": 922 } }, { "model": "library_management.conditiontaggeditem", "pk": 8865, "fields": { "tag": 2, "content_object": 922 } }, { "model": "library_management.conditiontaggeditem", "pk": 8866, "fields": { "tag": 11, "content_object": 923 } }, { "model": "library_management.conditiontaggeditem", "pk": 8867, "fields": { "tag": 13, "content_object": 926 } }, { "model": "library_management.conditiontaggeditem", "pk": 8868, "fields": { "tag": 7, "content_object": 926 } }, { "model": "library_management.conditiontaggeditem", "pk": 8869, "fields": { "tag": 3, "content_object": 927 } }, { "model": "library_management.conditiontaggeditem", "pk": 8870, "fields": { "tag": 15, "content_object": 927 } }, { "model": "library_management.conditiontaggeditem", "pk": 8871, "fields": { "tag": 14, "content_object": 928 } }, { "model": "library_management.conditiontaggeditem", "pk": 8872, "fields": { "tag": 6, "content_object": 928 } }, { "model": "library_management.conditiontaggeditem", "pk": 8873, "fields": { "tag": 8, "content_object": 929 } }, { "model": "library_management.conditiontaggeditem", "pk": 8874, "fields": { "tag": 3, "content_object": 929 } }, { "model": "library_management.conditiontaggeditem", "pk": 8875, "fields": { "tag": 18, "content_object": 930 } }, { "model": "library_management.conditiontaggeditem", "pk": 8876, "fields": { "tag": 20, "content_object": 930 } }, { "model": "library_management.conditiontaggeditem", "pk": 8877, "fields": { "tag": 13, "content_object": 932 } }, { "model": "library_management.conditiontaggeditem", "pk": 8878, "fields": { "tag": 15, "content_object": 933 } }, { "model": "library_management.conditiontaggeditem", "pk": 8879, "fields": { "tag": 4, "content_object": 936 } }, { "model": "library_management.conditiontaggeditem", "pk": 8880, "fields": { "tag": 20, "content_object": 936 } }, { "model": "library_management.conditiontaggeditem", "pk": 8881, "fields": { "tag": 17, "content_object": 938 } }, { "model": "library_management.conditiontaggeditem", "pk": 8882, "fields": { "tag": 2, "content_object": 938 } }, { "model": "library_management.conditiontaggeditem", "pk": 8883, "fields": { "tag": 17, "content_object": 939 } }, { "model": "library_management.conditiontaggeditem", "pk": 8884, "fields": { "tag": 16, "content_object": 940 } }, { "model": "library_management.conditiontaggeditem", "pk": 8885, "fields": { "tag": 2, "content_object": 943 } }, { "model": "library_management.conditiontaggeditem", "pk": 8886, "fields": { "tag": 10, "content_object": 943 } }, { "model": "library_management.conditiontaggeditem", "pk": 8887, "fields": { "tag": 3, "content_object": 944 } }, { "model": "library_management.conditiontaggeditem", "pk": 8888, "fields": { "tag": 1, "content_object": 945 } }, { "model": "library_management.conditiontaggeditem", "pk": 8889, "fields": { "tag": 18, "content_object": 946 } }, { "model": "library_management.conditiontaggeditem", "pk": 8890, "fields": { "tag": 18, "content_object": 947 } }, { "model": "library_management.conditiontaggeditem", "pk": 8891, "fields": { "tag": 5, "content_object": 947 } }, { "model": "library_management.conditiontaggeditem", "pk": 8892, "fields": { "tag": 17, "content_object": 950 } }, { "model": "library_management.conditiontaggeditem", "pk": 8893, "fields": { "tag": 6, "content_object": 950 } }, { "model": "library_management.conditiontaggeditem", "pk": 8894, "fields": { "tag": 12, "content_object": 951 } }, { "model": "library_management.conditiontaggeditem", "pk": 8895, "fields": { "tag": 17, "content_object": 952 } }, { "model": "library_management.conditiontaggeditem", "pk": 8896, "fields": { "tag": 14, "content_object": 954 } }, { "model": "library_management.conditiontaggeditem", "pk": 8897, "fields": { "tag": 13, "content_object": 954 } }, { "model": "library_management.conditiontaggeditem", "pk": 8898, "fields": { "tag": 7, "content_object": 955 } }, { "model": "library_management.conditiontaggeditem", "pk": 8899, "fields": { "tag": 16, "content_object": 956 } }, { "model": "library_management.conditiontaggeditem", "pk": 8900, "fields": { "tag": 1, "content_object": 957 } }, { "model": "library_management.conditiontaggeditem", "pk": 8901, "fields": { "tag": 4, "content_object": 958 } }, { "model": "library_management.conditiontaggeditem", "pk": 8902, "fields": { "tag": 2, "content_object": 958 } }, { "model": "library_management.conditiontaggeditem", "pk": 8903, "fields": { "tag": 16, "content_object": 961 } }, { "model": "library_management.conditiontaggeditem", "pk": 8904, "fields": { "tag": 16, "content_object": 962 } }, { "model": "library_management.conditiontaggeditem", "pk": 8905, "fields": { "tag": 12, "content_object": 962 } }, { "model": "library_management.conditiontaggeditem", "pk": 8906, "fields": { "tag": 13, "content_object": 963 } }, { "model": "library_management.conditiontaggeditem", "pk": 8907, "fields": { "tag": 6, "content_object": 964 } }, { "model": "library_management.conditiontaggeditem", "pk": 8908, "fields": { "tag": 15, "content_object": 965 } }, { "model": "library_management.conditiontaggeditem", "pk": 8909, "fields": { "tag": 5, "content_object": 965 } }, { "model": "library_management.conditiontaggeditem", "pk": 8910, "fields": { "tag": 6, "content_object": 968 } }, { "model": "library_management.conditiontaggeditem", "pk": 8911, "fields": { "tag": 3, "content_object": 968 } }, { "model": "library_management.conditiontaggeditem", "pk": 8912, "fields": { "tag": 11, "content_object": 972 } }, { "model": "library_management.conditiontaggeditem", "pk": 8913, "fields": { "tag": 17, "content_object": 973 } }, { "model": "library_management.conditiontaggeditem", "pk": 8914, "fields": { "tag": 1, "content_object": 973 } }, { "model": "library_management.conditiontaggeditem", "pk": 8915, "fields": { "tag": 12, "content_object": 974 } }, { "model": "library_management.conditiontaggeditem", "pk": 8916, "fields": { "tag": 7, "content_object": 975 } }, { "model": "library_management.conditiontaggeditem", "pk": 8917, "fields": { "tag": 20, "content_object": 975 } }, { "model": "library_management.conditiontaggeditem", "pk": 8918, "fields": { "tag": 9, "content_object": 977 } }, { "model": "library_management.conditiontaggeditem", "pk": 8919, "fields": { "tag": 12, "content_object": 978 } }, { "model": "library_management.conditiontaggeditem", "pk": 8920, "fields": { "tag": 8, "content_object": 978 } }, { "model": "library_management.conditiontaggeditem", "pk": 8921, "fields": { "tag": 7, "content_object": 979 } }, { "model": "library_management.conditiontaggeditem", "pk": 8922, "fields": { "tag": 11, "content_object": 979 } }, { "model": "library_management.conditiontaggeditem", "pk": 8923, "fields": { "tag": 20, "content_object": 980 } }, { "model": "library_management.conditiontaggeditem", "pk": 8924, "fields": { "tag": 2, "content_object": 980 } }, { "model": "library_management.conditiontaggeditem", "pk": 8925, "fields": { "tag": 5, "content_object": 981 } }, { "model": "library_management.conditiontaggeditem", "pk": 8926, "fields": { "tag": 2, "content_object": 981 } }, { "model": "library_management.conditiontaggeditem", "pk": 8927, "fields": { "tag": 3, "content_object": 982 } }, { "model": "library_management.conditiontaggeditem", "pk": 8928, "fields": { "tag": 16, "content_object": 983 } }, { "model": "library_management.conditiontaggeditem", "pk": 8929, "fields": { "tag": 14, "content_object": 983 } }, { "model": "library_management.conditiontaggeditem", "pk": 8930, "fields": { "tag": 4, "content_object": 984 } }, { "model": "library_management.conditiontaggeditem", "pk": 8931, "fields": { "tag": 3, "content_object": 984 } }, { "model": "library_management.conditiontaggeditem", "pk": 8932, "fields": { "tag": 9, "content_object": 985 } }, { "model": "library_management.conditiontaggeditem", "pk": 8933, "fields": { "tag": 17, "content_object": 986 } }, { "model": "library_management.conditiontaggeditem", "pk": 8934, "fields": { "tag": 9, "content_object": 987 } }, { "model": "library_management.conditiontaggeditem", "pk": 8935, "fields": { "tag": 18, "content_object": 989 } }, { "model": "library_management.conditiontaggeditem", "pk": 8936, "fields": { "tag": 10, "content_object": 989 } }, { "model": "library_management.conditiontaggeditem", "pk": 8937, "fields": { "tag": 4, "content_object": 990 } }, { "model": "library_management.conditiontaggeditem", "pk": 8938, "fields": { "tag": 8, "content_object": 991 } }, { "model": "library_management.conditiontaggeditem", "pk": 8939, "fields": { "tag": 6, "content_object": 991 } }, { "model": "library_management.conditiontaggeditem", "pk": 8940, "fields": { "tag": 4, "content_object": 993 } }, { "model": "library_management.conditiontaggeditem", "pk": 8941, "fields": { "tag": 18, "content_object": 994 } }, { "model": "library_management.conditiontaggeditem", "pk": 8942, "fields": { "tag": 16, "content_object": 996 } }, { "model": "library_management.conditiontaggeditem", "pk": 8943, "fields": { "tag": 10, "content_object": 996 } }, { "model": "library_management.conditiontaggeditem", "pk": 8944, "fields": { "tag": 14, "content_object": 997 } }, { "model": "library_management.conditiontaggeditem", "pk": 8945, "fields": { "tag": 8, "content_object": 997 } }, { "model": "library_management.conditiontaggeditem", "pk": 8946, "fields": { "tag": 2, "content_object": 998 } }, { "model": "library_management.conditiontaggeditem", "pk": 8947, "fields": { "tag": 6, "content_object": 998 } }, { "model": "library_management.conditiontaggeditem", "pk": 8948, "fields": { "tag": 16, "content_object": 999 } }, { "model": "library_management.conditiontaggeditem", "pk": 8949, "fields": { "tag": 3, "content_object": 999 } }, { "model": "library_management.conditiontaggeditem", "pk": 8950, "fields": { "tag": 12, "content_object": 421 } }, { "model": "library_management.conditiontaggeditem", "pk": 8951, "fields": { "tag": 15, "content_object": 421 } } ] django-taggit-6.1.0/sample_taggit/library_management/000077500000000000000000000000001467620475500227355ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/__init__.py000066400000000000000000000000001467620475500250340ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/admin.py000066400000000000000000000005301467620475500243750ustar00rootroot00000000000000from django.contrib import admin from library_management.models import ( Author, Book, BookType, ConditionTag, Magazine, PhysicalCopy, ) admin.site.register(Book) admin.site.register(Author) admin.site.register(BookType) admin.site.register(Magazine) admin.site.register(PhysicalCopy) admin.site.register(ConditionTag) django-taggit-6.1.0/sample_taggit/library_management/apps.py000066400000000000000000000002471467620475500242550ustar00rootroot00000000000000from django.apps import AppConfig class LibraryManagementConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "library_management" django-taggit-6.1.0/sample_taggit/library_management/forms.py000066400000000000000000000026351467620475500244430ustar00rootroot00000000000000from django import forms from taggit.models import Tag from .models import Author, Book, ConditionTag, PhysicalCopy class PhysicalCopyForm(forms.ModelForm): condition_tags = forms.ModelMultipleChoiceField( queryset=ConditionTag.objects.all(), widget=forms.CheckboxSelectMultiple, required=False, ) class Meta: model = PhysicalCopy fields = ["condition_tags"] class AuthorForm(forms.ModelForm): tags = forms.ModelMultipleChoiceField( queryset=Tag.objects.all(), widget=forms.CheckboxSelectMultiple, required=False ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["tags"].queryset = self.fields["tags"].queryset.order_by("name") class Meta: model = Author fields = [ "first_name", "last_name", "middle_name", "birth_date", "biography", "tags", ] class BookForm(forms.ModelForm): tags = forms.ModelMultipleChoiceField( queryset=Tag.objects.all(), widget=forms.CheckboxSelectMultiple, required=False ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["tags"].queryset = self.fields["tags"].queryset.order_by("name") class Meta: model = Book fields = ["name", "author", "published_date", "isbn", "summary", "tags"] django-taggit-6.1.0/sample_taggit/library_management/migrations/000077500000000000000000000000001467620475500251115ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/migrations/0001_initial.py000066400000000000000000000174371467620475500275700ustar00rootroot00000000000000# Generated by Django 5.0.6 on 2024-07-28 14:49 import uuid import django.db.models.deletion from django.db import migrations, models import taggit.managers class Migration(migrations.Migration): initial = True dependencies = [ ( "taggit", "0006_rename_taggeditem_content_type_object_id_taggit_tagg_content_8fc721_idx", ), ] operations = [ migrations.CreateModel( name="BookType", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "slug", models.SlugField( allow_unicode=True, max_length=100, unique=True, verbose_name="slug", ), ), ("name", models.CharField(max_length=255, unique=True)), ], options={ "verbose_name": "Book Type", "verbose_name_plural": "Book Types", }, ), migrations.CreateModel( name="ConditionTag", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "name", models.CharField(max_length=100, unique=True, verbose_name="name"), ), ( "slug", models.SlugField( allow_unicode=True, max_length=100, unique=True, verbose_name="slug", ), ), ], options={ "verbose_name": "Condition Tag", "verbose_name_plural": "Condition Tags", "ordering": ["name"], }, ), migrations.CreateModel( name="Author", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("first_name", models.CharField(blank=True, max_length=255)), ("last_name", models.CharField(blank=True, max_length=255)), ("middle_name", models.CharField(blank=True, max_length=255)), ("birth_date", models.DateField()), ("biography", models.TextField()), ( "tags", taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), ], ), migrations.CreateModel( name="Book", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=255)), ("published_date", models.DateField(null=True)), ("isbn", models.CharField(max_length=17, unique=True)), ("summary", models.TextField()), ( "author", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="library_management.author", ), ), ( "tags", taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), ], options={ "verbose_name": "Book", "verbose_name_plural": "Books", }, ), migrations.CreateModel( name="Magazine", fields=[], options={ "proxy": True, "indexes": [], "constraints": [], }, bases=("library_management.book",), ), migrations.CreateModel( name="ConditionTaggedItem", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "tag", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tagged_items", to="library_management.conditiontag", ), ), ], options={ "verbose_name": "Condition Tagged Item", "verbose_name_plural": "Condition Tagged Items", }, ), migrations.CreateModel( name="PhysicalCopy", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "barcode", models.UUIDField(default=uuid.uuid4, editable=False, unique=True), ), ( "book", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="physical_copies", to="library_management.book", ), ), ( "book_type", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="library_management.booktype", ), ), ( "condition_tags", taggit.managers.TaggableManager( blank=True, help_text="A comma-separated list of tags.", through="library_management.ConditionTaggedItem", to="library_management.ConditionTag", verbose_name="Tags", ), ), ], options={ "verbose_name": "Physical Copy", "verbose_name_plural": "Physical Copies", }, ), migrations.AddField( model_name="conditiontaggeditem", name="content_object", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="library_management.physicalcopy", ), ), ] django-taggit-6.1.0/sample_taggit/library_management/migrations/__init__.py000066400000000000000000000000001467620475500272100ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/models.py000066400000000000000000000062041467620475500245740ustar00rootroot00000000000000import uuid from django.db import models from django.urls import reverse from taggit.managers import TaggableManager from taggit.models import TagBase, TaggedItemBase class BookTypeChoices(models.TextChoices): HARDCOVER = "HC", "Hardcover" PAPERBACK = "PB", "Paperback" EBOOK = "EB", "E-book" AUDIOBOOK = "AB", "Audiobook" MAGAZINE = "MG", "Magazine" class BookType(TagBase): name = models.CharField(max_length=255, unique=True) class Meta: verbose_name = "Book Type" verbose_name_plural = "Book Types" class Book(models.Model): name = models.CharField(max_length=255) author = models.ForeignKey("Author", on_delete=models.CASCADE) published_date = models.DateField(null=True) isbn = models.CharField(max_length=17, unique=True) summary = models.TextField() tags = TaggableManager() @property def title(self): return self.name def __str__(self): return self.title class Meta: verbose_name = "Book" verbose_name_plural = "Books" class MagazineManager(models.Manager): def get_queryset(self): return ( super() .get_queryset() .filter( physical_copies__book_type__name="Magazine", physical_copies__isnull=False, ) .distinct() ) class Magazine(Book): objects = MagazineManager() class Meta: proxy = True @property def title(self): return f"{self.name} Edition: {self.published_date.strftime('%B %Y')}" class Author(models.Model): first_name = models.CharField(max_length=255, blank=True) last_name = models.CharField(max_length=255, blank=True) middle_name = models.CharField(max_length=255, blank=True) birth_date = models.DateField() biography = models.TextField() tags = TaggableManager() @property def full_name(self): return f"{self.first_name} {self.last_name}" def get_absolute_url(self): return reverse("author-detail", kwargs={"pk": self.pk}) def __str__(self): return self.full_name class ConditionTag(TagBase): class Meta: verbose_name = "Condition Tag" verbose_name_plural = "Condition Tags" ordering = ["name"] class ConditionTaggedItem(TaggedItemBase): tag = models.ForeignKey( ConditionTag, related_name="tagged_items", on_delete=models.CASCADE ) content_object = models.ForeignKey("PhysicalCopy", on_delete=models.CASCADE) class Meta: verbose_name = "Condition Tagged Item" verbose_name_plural = "Condition Tagged Items" class PhysicalCopy(models.Model): book = models.ForeignKey( Book, on_delete=models.CASCADE, related_name="physical_copies" ) barcode = models.UUIDField(unique=True, default=uuid.uuid4, editable=False) book_type = models.ForeignKey(BookType, on_delete=models.CASCADE) condition_tags = TaggableManager(through=ConditionTaggedItem, blank=True) def __str__(self): return f"{self.book.name} - {self.barcode}" class Meta: verbose_name = "Physical Copy" verbose_name_plural = "Physical Copies" django-taggit-6.1.0/sample_taggit/library_management/templates/000077500000000000000000000000001467620475500247335ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/000077500000000000000000000000001467620475500305735ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/author_detail.html000066400000000000000000000013311467620475500343030ustar00rootroot00000000000000{% extends "library_management/base.html" %} {% load custom_filters %} {% block title %}Author Detail{% endblock %} {% block content %}

{{ author.full_name }}

Birth Date: {{ author.birth_date }}

{{ author.biography }}

Tags

    {% for tag in author.tags.all|order_tags %}
  • {{ tag.name }}
  • {% endfor %}

Books

Back to list Edit Author {% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/author_form.html000066400000000000000000000006041467620475500340060ustar00rootroot00000000000000{% extends "library_management/base.html" %} {% block title %}Edit Author{% endblock %} {% block content %}

Edit Author

{% csrf_token %} {{ form.as_p }} Cancel
{% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/author_list.html000066400000000000000000000004431467620475500340170ustar00rootroot00000000000000{% extends "library_management/base.html" %} {% block title %}Authors{% endblock %} {% block content %}

Authors

{% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/base.html000066400000000000000000000026541467620475500324020ustar00rootroot00000000000000 {% block title %}Library Management{% endblock %} {% block extra_css %}{% endblock %}
{% block content %}{% endblock %}
{% block extra_js %}{% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/book_detail.html000066400000000000000000000023471467620475500337430ustar00rootroot00000000000000{% extends "library_management/base.html" %} {% load custom_filters %} {% block title %}Book Detail{% endblock %} {% block content %}

{{ book }}

Author: {{ book.author.full_name }}

Published Date: {{ book.published_date }}

ISBN: {{ book.isbn }}

Summary: {{ book.summary }}

Tags: {{ book.tags.all|join:", " }}

Physical Copies

    {% for copy in book.physical_copies.all %}
  • Type: {{ copy.book_type.name }}
    Condition: {{ copy.condition_tags.all|join:", " }}
    Update Condition
  • {% endfor %}
Back to list {% if book|classname == 'Book' %} Edit {% elif book|classname == 'Magazine' %} Edit {% endif %} {% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/book_form.html000066400000000000000000000005741467620475500334440ustar00rootroot00000000000000{% extends "library_management/base.html" %} {% block title %}Edit Book{% endblock %} {% block content %}

Edit Book

{% csrf_token %} {{ form.as_p }} Cancel
{% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/book_list.html000066400000000000000000000036161467620475500334540ustar00rootroot00000000000000{% extends "library_management/base.html" %} {% block title %}Book List{% endblock %} {% block content %}

Book List

    {% for book in page_obj %}
  • {{ book.name }} by {{ book.author }}
  • {% endfor %}
{% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/home_page.html000066400000000000000000000026111467620475500334050ustar00rootroot00000000000000{% extends 'library_management/base.html' %} {% block content %}

Library Management Home

Number of Books

{{ num_books }}

Genres Represented
    {% for genre in genres %}
  • {{ genre.name }}: {{ genre.count }}
  • {% endfor %}
Condition of Physical Books
    {% for condition in condition_stats %}
  • {{ condition.condition_tags__name }}: {{ condition.count }}
  • {% endfor %}
{% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templates/library_management/magazine_list.html000066400000000000000000000005731467620475500343140ustar00rootroot00000000000000{% extends "library_management/base.html" %} {% block title %}Magazine List{% endblock %} {% block content %}

Magazines

{% endblock %} physical_copy_form.html000066400000000000000000000007121467620475500352730ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/templates/library_management{% extends "library_management/base.html" %} {% block title %}Update Physical Copy Condition{% endblock %} {% block content %}

Update Physical Copy Condition

{% csrf_token %} {{ form.as_p }}
Cancel
{% endblock %} django-taggit-6.1.0/sample_taggit/library_management/templatetags/000077500000000000000000000000001467620475500254275ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/templatetags/__init__.py000066400000000000000000000000001467620475500275260ustar00rootroot00000000000000django-taggit-6.1.0/sample_taggit/library_management/templatetags/custom_filters.py000066400000000000000000000003161467620475500310430ustar00rootroot00000000000000from django import template register = template.Library() @register.filter def classname(obj): return obj.__class__.__name__ @register.filter def order_tags(tags): return tags.order_by("name") django-taggit-6.1.0/sample_taggit/library_management/urls.py000066400000000000000000000025661467620475500243050ustar00rootroot00000000000000from django.urls import path from .views import ( AuthorDetailView, AuthorListView, AuthorUpdateView, BookCreateView, BookDetailView, BookListView, BookUpdateView, MagazineCreateView, MagazineDetailView, MagazineListView, MagazineUpdateView, PhysicalCopyUpdateView, home_page, ) urlpatterns = [ path("", home_page, name="home_page"), path("book_list", BookListView.as_view(), name="book-list"), path("book//", BookDetailView.as_view(), name="book-detail"), path("book/new/", BookCreateView.as_view(), name="book-create"), path("book//edit/", BookUpdateView.as_view(), name="book-update"), path("authors/", AuthorListView.as_view(), name="author-list"), path("authors//", AuthorDetailView.as_view(), name="author-detail"), path("authors//edit/", AuthorUpdateView.as_view(), name="author-update"), path("magazines/", MagazineListView.as_view(), name="magazine-list"), path("magazine//", MagazineDetailView.as_view(), name="magazine-detail"), path("magazine/new/", MagazineCreateView.as_view(), name="magazine-create"), path( "magazine//edit/", MagazineUpdateView.as_view(), name="magazine-update" ), path( "physical_copy//edit/", PhysicalCopyUpdateView.as_view(), name="physical-copy-update", ), ] django-taggit-6.1.0/sample_taggit/library_management/views.py000066400000000000000000000066271467620475500244570ustar00rootroot00000000000000from django.db.models import Count from django.db.models.functions import Lower from django.shortcuts import render from django.urls import reverse, reverse_lazy from django.views.generic import CreateView, DetailView, ListView, UpdateView from .forms import AuthorForm, BookForm, PhysicalCopyForm from .models import Author, Book, Magazine, PhysicalCopy def home_page(request): # Number of books num_books = Book.objects.count() # Different genres represented genres = Book.tags.values("name").annotate(count=Count("name")).order_by("-count") # Condition of physical books condition_stats = ( PhysicalCopy.objects.values("condition_tags__name") .annotate(count=Count("condition_tags")) .order_by("-count") ) context = { "num_books": num_books, "genres": genres, "condition_stats": condition_stats, } return render(request, "library_management/home_page.html", context) class BookListView(ListView): model = Book template_name = "library_management/book_list.html" context_object_name = "books" paginate_by = 20 def get_ordering(self): ordering = self.request.GET.get("ordering", "name") if ordering == "name": return [Lower("name")] return [ordering] class BookDetailView(DetailView): model = Book template_name = "library_management/book_detail.html" context_object_name = "book" class BookCreateView(CreateView): model = Book template_name = "library_management/book_form.html" fields = ["name", "author", "published_date", "isbn", "summary", "tags"] success_url = reverse_lazy("book-list") class BookUpdateView(UpdateView): model = Book form_class = BookForm template_name = "library_management/book_form.html" def get_success_url(self): return reverse("book-detail", kwargs={"pk": self.object.pk}) class AuthorListView(ListView): model = Author template_name = "library_management/author_list.html" context_object_name = "authors" ordering = ["last_name", "first_name"] class AuthorDetailView(DetailView): model = Author template_name = "library_management/author_detail.html" context_object_name = "author" class AuthorUpdateView(UpdateView): model = Author form_class = AuthorForm template_name = "library_management/author_form.html" context_object_name = "author" class MagazineListView(BookListView): model = Magazine template_name = "library_management/magazine_list.html" context_object_name = "magazines" class MagazineDetailView(BookDetailView): model = Magazine template_name = "library_management/book_detail.html" context_object_name = "book" class MagazineCreateView(BookCreateView): model = Magazine template_name = "library_management/book_form.html" success_url = reverse_lazy("magazine-list") class MagazineUpdateView(BookUpdateView): model = Magazine form_class = BookForm template_name = "library_management/book_form.html" context_object_name = "book" def get_success_url(self): return reverse("magazine-detail", kwargs={"pk": self.object.pk}) class PhysicalCopyUpdateView(UpdateView): model = PhysicalCopy form_class = PhysicalCopyForm template_name = "library_management/physical_copy_form.html" def get_success_url(self): return reverse("book-detail", kwargs={"pk": self.object.book.pk}) django-taggit-6.1.0/sample_taggit/make.bat000066400000000000000000000025611467620475500205060ustar00rootroot00000000000000:: make.bat @echo off set PYTHON=python if not "%2" == "" ( set PYTHON=%2 ) if "%1" == "reset-db" ( %PYTHON% manage.py migrate library_management zero %PYTHON% manage.py migrate taggit zero %PYTHON% manage.py migrate for %%f in (fixtures\*.json) do ( %PYTHON% manage.py loaddata %%f ) ) else if "%1" == "export-data" ( %PYTHON% manage.py dumpdata --indent 2 auth.User --output=fixtures\0001_users.json %PYTHON% manage.py dumpdata --indent 2 library_management.Author --output=fixtures\0002_author.json %PYTHON% manage.py dumpdata --indent 2 library_management.BookType --output=fixtures\0003_book_type.json %PYTHON% manage.py dumpdata --indent 2 library_management.Book --output=fixtures\0004_books.json %PYTHON% manage.py dumpdata --indent 2 taggit.Tag --output=fixtures\0005_tags.json %PYTHON% manage.py dumpdata --indent 2 library_management.ConditionTag --output=fixtures\0006_condition_tags.json %PYTHON% manage.py dumpdata --indent 2 library_management.PhysicalCopy --output=fixtures\0007_tags.json %PYTHON% manage.py dumpdata --indent 2 library_management.ConditionTaggedItem --output=fixtures\0008_condition_tagged_item.json ) else if "%1" == "loaddata" ( for %%f in (fixtures\*.json) do ( %PYTHON% manage.py loaddata %%f ) ) else ( echo Invalid command. Use 'reset-db', 'export', or 'loaddata'. ) django-taggit-6.1.0/sample_taggit/makefile000066400000000000000000000023221467620475500205740ustar00rootroot00000000000000# Makefile PYTHON ?= python3 reset-db: $(PYTHON) manage.py migrate library_management zero; $(PYTHON) manage.py migrate taggit zero; $(PYTHON) manage.py migrate; $(PYTHON) manage.py loaddata fixtures/*.json export-data: $(PYTHON) manage.py dumpdata --indent 2 auth.User --output=sample_taggit/fixtures/0001_users.json; $(PYTHON) manage.py dumpdata --indent 2 library_management.Author --output=sample_taggit/fixtures/0002_author.json; $(PYTHON) manage.py dumpdata --indent 2 library_management.BookType --output=sample_taggit/fixtures/0003_book_type.json; $(PYTHON) manage.py dumpdata --indent 2 library_management.Book --output=sample_taggit/fixtures/0004_books.json; $(PYTHON) manage.py dumpdata --indent 2 taggit.Tag --output=sample_taggit/fixtures/0005_tags.json; $(PYTHON) manage.py dumpdata --indent 2 library_management.ConditionTag --output=sample_taggit/fixtures/0006_condition_tags.json; $(PYTHON) manage.py dumpdata --indent 2 library_management.PhysicalCopy --output=sample_taggit/fixtures/0007_tags.json; $(PYTHON) manage.py dumpdata --indent 2 library_management.ConditionTaggedItem --output=sample_taggit/fixtures/0008_condition_tagged_item.json; loaddata: $(PYTHON) manage.py loaddata fixtures/*.json django-taggit-6.1.0/sample_taggit/manage.py000077500000000000000000000014571467620475500207110ustar00rootroot00000000000000#!/usr/bin/env python """Django's command-line utility for administrative tasks.""" import os import sys from pathlib import Path def main(): """Run administrative tasks.""" # add this so that we can import from sample_taggit sys.path.append(str(Path(__file__).resolve().parent.parent)) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample_taggit.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv) if __name__ == "__main__": main() django-taggit-6.1.0/sample_taggit/settings.py000066400000000000000000000063771467620475500213240ustar00rootroot00000000000000""" Django settings for sample_taggit project. Generated by 'django-admin startproject' using Django 5.0.6. For more information on this file, see https://docs.djangoproject.com/en/5.0/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/5.0/ref/settings/ """ import os from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = "django-insecure-1$#3+wir_0n0&d#_f$35%b-fb_!f(8vzh8*a2x%ih*+j6*gih_" # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "taggit", "library_management", ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ] ROOT_URLCONF = "sample_taggit.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [os.path.join(BASE_DIR, "templates")], "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], }, }, ] WSGI_APPLICATION = "sample_taggit.wsgi.application" # Database # https://docs.djangoproject.com/en/5.0/ref/settings/#databases DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": BASE_DIR / "db.sqlite3", } } # Password validation # https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] # Internationalization # https://docs.djangoproject.com/en/5.0/topics/i18n/ LANGUAGE_CODE = "en-us" TIME_ZONE = "UTC" USE_I18N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.0/howto/static-files/ STATIC_URL = "static/" # Default primary key field type # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" django-taggit-6.1.0/sample_taggit/urls.py000066400000000000000000000015721467620475500204410ustar00rootroot00000000000000""" URL configuration for sample_taggit project. The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/5.0/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import include, path from library_management import urls as library_management_urls urlpatterns = [ path("admin/", admin.site.urls), path("", include(library_management_urls)), ] django-taggit-6.1.0/sample_taggit/wsgi.py000066400000000000000000000006231467620475500204210ustar00rootroot00000000000000""" WSGI config for sample_taggit project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/ """ import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample_taggit.settings") application = get_wsgi_application() django-taggit-6.1.0/setup.cfg000066400000000000000000000026351467620475500161040ustar00rootroot00000000000000[metadata] name = django-taggit version = attr: taggit.__version__ description = django-taggit is a reusable Django application for simple tagging. long_description = file: README.rst author = Alex Gaynor author_email = alex.gaynor@gmail.com url = https://github.com/jazzband/django-taggit license = BSD classifiers = Development Status :: 5 - Production/Stable Environment :: Web Environment Framework :: Django Framework :: Django :: 4.1 Framework :: Django :: 4.2 Framework :: Django :: 5.0 Intended Audience :: Developers License :: OSI Approved :: BSD License Operating System :: OS Independent Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3 :: Only Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 project_urls = Documentation = https://django-taggit.readthedocs.io Source = https://github.com/jazzband/django-taggit Tracker = https://github.com/jazzband/django-taggit/issues [options] python_requires = >=3.8 packages = find: install_requires = Django>=4.1 include_package_data = true zip_safe = false [options.packages.find] exclude = tests* [flake8] # E501: line too long ignore = E501 exclude = .venv,.git,.tox,.direnv [isort] profile = black django-taggit-6.1.0/setup.py000066400000000000000000000000461467620475500157670ustar00rootroot00000000000000from setuptools import setup setup() django-taggit-6.1.0/taggit/000077500000000000000000000000001467620475500155345ustar00rootroot00000000000000django-taggit-6.1.0/taggit/__init__.py000066400000000000000000000001041467620475500176400ustar00rootroot00000000000000VERSION = (6, 1, 0) __version__ = ".".join(str(i) for i in VERSION) django-taggit-6.1.0/taggit/admin.py000066400000000000000000000063631467620475500172060ustar00rootroot00000000000000from django.contrib import admin from django.db import transaction from django.shortcuts import redirect, render from django.urls import path from taggit.models import Tag, TaggedItem from .forms import MergeTagsForm class TaggedItemInline(admin.StackedInline): model = TaggedItem @admin.register(Tag) class TagAdmin(admin.ModelAdmin): inlines = [TaggedItemInline] list_display = ["name", "slug"] ordering = ["name", "slug"] search_fields = ["name"] prepopulated_fields = {"slug": ["name"]} actions = ["render_tag_form"] def get_urls(self): urls = super().get_urls() custom_urls = [ path( "merge-tags/", self.admin_site.admin_view(self.merge_tags_view), name="taggit_tag_merge_tags", ), ] return custom_urls + urls @admin.action(description="Merge selected tags") def render_tag_form(self, request, queryset): selected = request.POST.getlist(admin.helpers.ACTION_CHECKBOX_NAME) if not selected: self.message_user(request, "Please select at least one tag.") return redirect(request.get_full_path()) selected_tag_ids = ",".join(selected) redirect_url = f"{request.get_full_path()}merge-tags/" request.session["selected_tag_ids"] = selected_tag_ids return redirect(redirect_url) def merge_tags_view(self, request): selected_tag_ids = request.session.get("selected_tag_ids", "").split(",") if request.method == "POST": form = MergeTagsForm(request.POST) if form.is_valid(): new_tag_name = form.cleaned_data["new_tag_name"] new_tag, created = Tag.objects.get_or_create(name=new_tag_name) with transaction.atomic(): for tag_id in selected_tag_ids: tag = Tag.objects.get(id=tag_id) tagged_items = TaggedItem.objects.filter(tag=tag) for tagged_item in tagged_items: if TaggedItem.objects.filter( tag=new_tag, content_type=tagged_item.content_type, object_id=tagged_item.object_id, ).exists(): # we have the new tag as well, so we can just # remove the tag association tagged_item.delete() else: # point this taggedItem to the new one tagged_item.tag = new_tag tagged_item.save() self.message_user(request, "Tags have been merged", level="success") # clear the selected_tag_ids from session after merge is complete request.session.pop("selected_tag_ids", None) return redirect("..") else: self.message_user(request, "Form is invalid.", level="error") context = { "form": MergeTagsForm(), "selected_tag_ids": selected_tag_ids, } return render(request, "admin/taggit/merge_tags_form.html", context) django-taggit-6.1.0/taggit/apps.py000066400000000000000000000003651467620475500170550ustar00rootroot00000000000000from django.apps import AppConfig as BaseConfig from django.utils.translation import gettext_lazy as _ class TaggitAppConfig(BaseConfig): name = "taggit" verbose_name = _("Taggit") default_auto_field = "django.db.models.AutoField" django-taggit-6.1.0/taggit/forms.py000066400000000000000000000032261467620475500172370ustar00rootroot00000000000000from django import forms from django.utils.translation import gettext as _ from taggit.utils import edit_string_for_tags, parse_tags class TagWidgetMixin: def format_value(self, value): if value is not None and not isinstance(value, str): value = edit_string_for_tags(value) return super().format_value(value) class TagWidget(TagWidgetMixin, forms.TextInput): pass class TextareaTagWidget(TagWidgetMixin, forms.Textarea): pass class TagField(forms.CharField): widget = TagWidget def clean(self, value): value = super().clean(value) try: return parse_tags(value) except ValueError: raise forms.ValidationError( _("Please provide a comma-separated list of tags.") ) def has_changed(self, initial_value, data_value): # Always return False if the field is disabled since self.bound_data # always uses the initial value in this case. if self.disabled: return False try: data_value = self.clean(data_value) except forms.ValidationError: pass # normalize "empty values" if not data_value: data_value = [] if not initial_value: initial_value = [] initial_value = [tag.name for tag in initial_value] initial_value.sort() return initial_value != data_value class MergeTagsForm(forms.Form): new_tag_name = forms.CharField( label="New Tag Name", max_length=100, widget=forms.TextInput(attrs={"id": "id_new_tag_name"}), help_text="Enter new or existing tag name", ) django-taggit-6.1.0/taggit/locale/000077500000000000000000000000001467620475500167735ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/ar/000077500000000000000000000000001467620475500173755ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/ar/LC_MESSAGES/000077500000000000000000000000001467620475500211625ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/ar/LC_MESSAGES/django.mo000066400000000000000000000024231467620475500227620ustar00rootroot00000000000000Þ•ŒüHIhˆ˜.¨×Þ ã ðú þ œ&¹.à B0s ‚¥ ¿Êæ    %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.TaggitTagscontent typeobject IDtagtagged itemtagged itemstagsProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2021-04-19 23:30+0100 Last-Translator: Soufyane Hedidi Language-Team: Language: ar_DZ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 2.3 Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5); %(object)s الموسوم بـ %(tag)sقائمة وسوم Ù…ÙØµÙˆÙ„Ø© Ø¨ÙØ§ØµÙ„Ø©.الإسمسبيكة الوسميرجى توÙير قائمة وسوم Ù…ÙØµÙˆÙ„Ø© Ø¨ÙØ§ØµÙ„Ø©.أوْسÙمهالوسومنوع المحتوىمعرّÙ٠الكائنالوسمالعنصر الموسومالعناصر الموسومةالوسومdjango-taggit-6.1.0/taggit/locale/ar/LC_MESSAGES/django.po000066400000000000000000000042361467620475500227710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:27+0900\n" "PO-Revision-Date: 2021-04-19 23:30+0100\n" "Last-Translator: Soufyane Hedidi \n" "Language-Team: \n" "Language: ar_DZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.3\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "أوْسÙمه" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "يرجى توÙير قائمة وسوم Ù…ÙØµÙˆÙ„Ø© Ø¨ÙØ§ØµÙ„Ø©." #: taggit/managers.py:432 msgid "Tags" msgstr "الوسوم" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "قائمة وسوم Ù…ÙØµÙˆÙ„Ø© Ø¨ÙØ§ØµÙ„Ø©." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "الإسم" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "سبيكة الوسم" #: taggit/models.py:82 msgid "tag" msgstr "الوسم" #: taggit/models.py:83 msgid "tags" msgstr "الوسوم" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s الموسوم بـ %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "نوع المحتوى" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "معرّÙ٠الكائن" #: taggit/models.py:180 msgid "tagged item" msgstr "العنصر الموسوم" #: taggit/models.py:181 msgid "tagged items" msgstr "العناصر الموسومة" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/cs/000077500000000000000000000000001467620475500174005ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/cs/LC_MESSAGES/000077500000000000000000000000001467620475500211655ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/cs/LC_MESSAGES/django.mo000066400000000000000000000020221467620475500227600ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï Û]è!F!hŠ‘)–À Å ÐÛßù   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; %(object)s oznaÄen tagem %(tag)sČárkami oddÄ›lený seznam tagůJménoSlugVložte Äárkami oddÄ›lený seznam tagůTagyTyp obsahuID objektuTagTagem oznaÄená položkaTagy oznaÄené položkydjango-taggit-6.1.0/taggit/locale/cs/LC_MESSAGES/django.po000066400000000000000000000037251467620475500227760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:28+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Vložte Äárkami oddÄ›lený seznam tagů" #: taggit/managers.py:432 msgid "Tags" msgstr "Tagy" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Čárkami oddÄ›lený seznam tagů" #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Jméno" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Slug" #: taggit/models.py:82 msgid "tag" msgstr "Tag" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s oznaÄen tagem %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Typ obsahu" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "ID objektu" #: taggit/models.py:180 msgid "tagged item" msgstr "Tagem oznaÄená položka" #: taggit/models.py:181 msgid "tagged items" msgstr "Tagy oznaÄené položky" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/da/000077500000000000000000000000001467620475500173575ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/da/LC_MESSAGES/000077500000000000000000000000001467620475500211445ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/da/LC_MESSAGES/django.mo000066400000000000000000000020111467620475500227350ustar00rootroot00000000000000Þ•ŒüHIhˆ˜.¨×Þ ã ðú þ "?^{€+…±¸ À Í×Þî   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.TaggitTagscontent typeobject IDtagtagged itemtagged itemstagsProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2020-10-25 14:29+0100 Last-Translator: Language-Team: Language: da MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 2.4.1 %(object)s mærket med %(tag)sAdskil mærker med et komma.navnslugVenligts angiv mærker adskilt af et komma.TaggitMærkerindholdstypeobjekt IDmærkemærket elementmærkede elementermærkerdjango-taggit-6.1.0/taggit/locale/da/LC_MESSAGES/django.po000066400000000000000000000036251467620475500227540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , 2020. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:29+0900\n" "PO-Revision-Date: 2020-10-25 14:29+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.1\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "Taggit" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Venligts angiv mærker adskilt af et komma." #: taggit/managers.py:432 msgid "Tags" msgstr "Mærker" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Adskil mærker med et komma." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "navn" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "slug" #: taggit/models.py:82 msgid "tag" msgstr "mærke" #: taggit/models.py:83 msgid "tags" msgstr "mærker" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s mærket med %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "indholdstype" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "objekt ID" #: taggit/models.py:180 msgid "tagged item" msgstr "mærket element" #: taggit/models.py:181 msgid "tagged items" msgstr "mærkede elementer" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/de/000077500000000000000000000000001467620475500173635ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/de/LC_MESSAGES/000077500000000000000000000000001467620475500211505ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/de/LC_MESSAGES/django.mo000066400000000000000000000020541467620475500227500ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï ÛHè&1+X„‰:‘ Ì Ú å ïú   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: django-taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2010-09-07 09:26-0700 Last-Translator: Jannis Leidel Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1) %(object)s verschlagwortet mit %(tag)sEine durch Komma getrennte Schlagwortliste.NameKürzelBitte eine durch Komma getrennte Schlagwortliste eingeben.SchlagwörterInhaltstypObjekt-IDSchlagwortVerschlagwortetes ObjektVerschlagwortete Objektedjango-taggit-6.1.0/taggit/locale/de/LC_MESSAGES/django.po000066400000000000000000000034571467620475500227630ustar00rootroot00000000000000#, fuzzy msgid "" msgstr "" "Project-Id-Version: django-taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:29+0900\n" "PO-Revision-Date: 2010-09-07 09:26-0700\n" "Last-Translator: Jannis Leidel \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Bitte eine durch Komma getrennte Schlagwortliste eingeben." #: taggit/managers.py:432 msgid "Tags" msgstr "Schlagwörter" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Eine durch Komma getrennte Schlagwortliste." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Name" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Kürzel" #: taggit/models.py:82 msgid "tag" msgstr "Schlagwort" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s verschlagwortet mit %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Inhaltstyp" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Objekt-ID" #: taggit/models.py:180 msgid "tagged item" msgstr "Verschlagwortetes Objekt" #: taggit/models.py:181 msgid "tagged items" msgstr "Verschlagwortete Objekte" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/el/000077500000000000000000000000001467620475500173735ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/el/LC_MESSAGES/000077500000000000000000000000001467620475500211605ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/el/LC_MESSAGES/django.mo000066400000000000000000000017371467620475500227670ustar00rootroot00000000000000Þ•\ œÈÉè.(W\N`0¯Pà 1<|B¿Ð%(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.TagstagProject-Id-Version: django-taggit Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Serafeim Papastefanos Language-Team: Greek Language: el MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); %(object)s μαÏκαÏισμένα με %(tag)sΜια χωÏισμένη με κόμματα λίστα από ετικέτεςΌνομαSluigΠαÏακαλοÏμε συπληÏώστε μια λίστα από ετικέτες χωÏισμένη με κόμματαΕτικέτεςΕτικέταdjango-taggit-6.1.0/taggit/locale/el/LC_MESSAGES/django.po000066400000000000000000000042141467620475500227630ustar00rootroot00000000000000#, fuzzy msgid "" msgstr "" "Project-Id-Version: django-taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:30+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Serafeim Papastefanos \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "ΠαÏακαλοÏμε συπληÏώστε μια λίστα από ετικέτες χωÏισμένη με κόμματα" #: taggit/managers.py:432 msgid "Tags" msgstr "Ετικέτες" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Μια χωÏισμένη με κόμματα λίστα από ετικέτες" #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Όνομα" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Sluig" #: taggit/models.py:82 msgid "tag" msgstr "Ετικέτα" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s μαÏκαÏισμένα με %(tag)s" #: taggit/models.py:134 #, fuzzy #| msgid "Content type" msgid "content type" msgstr "Είδος πεÏιεχομένου" #: taggit/models.py:165 taggit/models.py:172 #, fuzzy #| msgid "Object id" msgid "object ID" msgstr "Κωδικός αντικειμένου" #: taggit/models.py:180 #, fuzzy #| msgid "Tagged Item" msgid "tagged item" msgstr "Αντικείμενο με ετικέτα" #: taggit/models.py:181 #, fuzzy #| msgid "Tagged Items" msgid "tagged items" msgstr "Αντικείμενα με ετικέτα" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/en/000077500000000000000000000000001467620475500173755ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/en/LC_MESSAGES/000077500000000000000000000000001467620475500211625ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/en/LC_MESSAGES/django.mo000066400000000000000000000005211467620475500227570ustar00rootroot00000000000000Þ•$,89Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit django-taggit-6.1.0/taggit/locale/en/LC_MESSAGES/django.po000066400000000000000000000033121467620475500227630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:31+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "" #: taggit/managers.py:432 msgid "Tags" msgstr "" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "" #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "" #: taggit/models.py:82 msgid "tag" msgstr "" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "" #: taggit/models.py:134 msgid "content type" msgstr "" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "" #: taggit/models.py:180 msgid "tagged item" msgstr "" #: taggit/models.py:181 msgid "tagged items" msgstr "" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/eo/000077500000000000000000000000001467620475500173765ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/eo/LC_MESSAGES/000077500000000000000000000000001467620475500211635ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/eo/LC_MESSAGES/django.mo000066400000000000000000000021531467620475500227630ustar00rootroot00000000000000Þ• „ì01Pp€.¿Æ Ë Øâ æ òˆÿˆ&¥Ì Ñ6Ý & 0;CV   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.TaggitTagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: django-taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2014-03-29 18:57+0100 Last-Translator: Baptiste Darthenay Language-Team: Esperanto Language: eo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 1.5.4 %(object)s etikedita %(tag)sListo da etikedoj apartitaj per komoj.NomoÄ´etonvortoBonvolu enmeti liston da etikedoj apartitaj per komoj.EtikedojEtikedojEnhavtipoObjekto IDEtikedoEtikedita elementoEtikeditaj elementojdjango-taggit-6.1.0/taggit/locale/eo/LC_MESSAGES/django.po000066400000000000000000000035211467620475500227660ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: django-taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:31+0900\n" "PO-Revision-Date: 2014-03-29 18:57+0100\n" "Last-Translator: Baptiste Darthenay \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "Etikedoj" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Bonvolu enmeti liston da etikedoj apartitaj per komoj." #: taggit/managers.py:432 msgid "Tags" msgstr "Etikedoj" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Listo da etikedoj apartitaj per komoj." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Nomo" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Ä´etonvorto" #: taggit/models.py:82 msgid "tag" msgstr "Etikedo" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s etikedita %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Enhavtipo" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Objekto ID" #: taggit/models.py:180 msgid "tagged item" msgstr "Etikedita elemento" #: taggit/models.py:181 msgid "tagged items" msgstr "Etikeditaj elementoj" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/es/000077500000000000000000000000001467620475500174025ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/es/LC_MESSAGES/000077500000000000000000000000001467620475500211675ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/es/LC_MESSAGES/django.mo000066400000000000000000000020421467620475500227640ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï ÛBè"+*Ny€?… ÅÏ áïø    %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); %(object)s etiquetados con %(tag)sUna lista de etiquetas separadas por coma.NombreSlugPor favor introduzca una lista de etiquetas separadas por coma.EtiquetasTipo de contenidoId del objetoEtiquetaElemento etiquetadoElementos etiquetadosdjango-taggit-6.1.0/taggit/locale/es/LC_MESSAGES/django.po000066400000000000000000000037451467620475500230020ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:32+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Por favor introduzca una lista de etiquetas separadas por coma." #: taggit/managers.py:432 msgid "Tags" msgstr "Etiquetas" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Una lista de etiquetas separadas por coma." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Nombre" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Slug" #: taggit/models.py:82 msgid "tag" msgstr "Etiqueta" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s etiquetados con %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Tipo de contenido" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Id del objeto" #: taggit/models.py:180 msgid "tagged item" msgstr "Elemento etiquetado" #: taggit/models.py:181 msgid "tagged items" msgstr "Elementos etiquetados" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/fa/000077500000000000000000000000001467620475500173615ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/fa/LC_MESSAGES/000077500000000000000000000000001467620475500211465ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/fa/LC_MESSAGES/django.mo000066400000000000000000000022631467620475500227500ustar00rootroot00000000000000Þ• „ì01Pp€.¿ Ä ÑÛ ß ëø2ý40Ee«²W»#5 E%P,v£   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemstagsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2021-07-27 23:15+0430 Last-Translator: Mohammad Hossein Yazdani Language-Team: LANGUAGE Language: fa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %(object)s برچسب گزاری شده با %(tag)sیک لیست از برچسب های جدا شده توسط کاما Ù†Ø§Ù…Ù†Ø§Ù…Ú©Ù„Ø·ÙØ§ لیستی از برچسب های جدا شده توسط کاما بسازیدبرچسب هانوع محتواشناسه شیبرچسبآیتم برچسب گزاری شدهآیتم های برچسب گزاری شدهبرچسب هاdjango-taggit-6.1.0/taggit/locale/fa/LC_MESSAGES/django.po000066400000000000000000000041621467620475500227530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Mohammad Hossein Yazdani , 2021. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:32+0900\n" "PO-Revision-Date: 2021-07-27 23:15+0430\n" "Last-Translator: Mohammad Hossein Yazdani \n" "Language-Team: LANGUAGE \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Ù„Ø·ÙØ§ لیستی از برچسب های جدا شده توسط کاما بسازید" #: taggit/managers.py:432 msgid "Tags" msgstr "برچسب ها" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "یک لیست از برچسب های جدا شده توسط کاما " #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "نام" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "نامک" #: taggit/models.py:82 msgid "tag" msgstr "برچسب" #: taggit/models.py:83 msgid "tags" msgstr "برچسب ها" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s برچسب گزاری شده با %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "نوع محتوا" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "شناسه Ø´ÛŒ" #: taggit/models.py:180 msgid "tagged item" msgstr "آیتم برچسب گزاری شده" #: taggit/models.py:181 msgid "tagged items" msgstr "آیتم های برچسب گزاری شده" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/fi/000077500000000000000000000000001467620475500173715ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/fi/LC_MESSAGES/000077500000000000000000000000001467620475500211565ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/fi/LC_MESSAGES/django.mo000066400000000000000000000020271467620475500227560ustar00rootroot00000000000000Þ• „ì01Pp€.¿Æ Ë Øâ æ ò?ÿ"?!b„ ‰3“ÇÍÓ ãîó   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.TaggitTagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: django-taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2018-01-06 17:27-0600 Last-Translator: Nikolay Korotkiy Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); %(object)s on merkitty %(tag)s:llaPilkulla erotettu lista tageista.NimiLyhytnimiOle hyvä ja anna pilkulla erotettu lista tageista.TagitTagitSisältötyyppiKohteen IDTagiMerkitty kohdeMerkittyjä kohteitadjango-taggit-6.1.0/taggit/locale/fi/LC_MESSAGES/django.po000066400000000000000000000036101467620475500227600ustar00rootroot00000000000000# This file is distributed under the same license as the django-taggit package. # # Translators: # Nikolay Korotkiy , 2018 # msgid "" msgstr "" "Project-Id-Version: django-taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:32+0900\n" "PO-Revision-Date: 2018-01-06 17:27-0600\n" "Last-Translator: Nikolay Korotkiy \n" "Language-Team: Finnish\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "Tagit" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Ole hyvä ja anna pilkulla erotettu lista tageista." #: taggit/managers.py:432 msgid "Tags" msgstr "Tagit" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Pilkulla erotettu lista tageista." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Nimi" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Lyhytnimi" #: taggit/models.py:82 msgid "tag" msgstr "Tagi" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s on merkitty %(tag)s:lla" #: taggit/models.py:134 msgid "content type" msgstr "Sisältötyyppi" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Kohteen ID" #: taggit/models.py:180 msgid "tagged item" msgstr "Merkitty kohde" #: taggit/models.py:181 msgid "tagged items" msgstr "Merkittyjä kohteita" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/fr/000077500000000000000000000000001467620475500174025ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/fr/LC_MESSAGES/000077500000000000000000000000001467620475500211675ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/fr/LC_MESSAGES/django.mo000066400000000000000000000021211467620475500227620ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï ÛVè#?6cšžA£ åñ %:   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2019-04-09 10:57+0200 Last-Translator: Guillaume Bernard Language-Team: Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Poedit 2.2.1 %(object)s étiquetés avec %(tag)sUne liste d’étiquettes séparées par des virgules.nomslugRenseignez une liste d’étiquettes séparées par des virgules.ÉtiquettesType de contenuIdentifiant de l’objetÉtiquetteÉlément étiquetéÉléments étiquetésdjango-taggit-6.1.0/taggit/locale/fr/LC_MESSAGES/django.po000066400000000000000000000040311467620475500227670ustar00rootroot00000000000000# French translation for django-taggit # Copyright (C) Jazz Band # This file is distributed under the same license as the taggit package. # Guillaume Bernard , 2019 # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:33+0900\n" "PO-Revision-Date: 2019-04-09 10:57+0200\n" "Last-Translator: Guillaume Bernard \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.2.1\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Renseignez une liste d’étiquettes séparées par des virgules." #: taggit/managers.py:432 msgid "Tags" msgstr "Étiquettes" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Une liste d’étiquettes séparées par des virgules." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "nom" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "slug" #: taggit/models.py:82 msgid "tag" msgstr "Étiquette" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s étiquetés avec %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Type de contenu" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Identifiant de l’objet" #: taggit/models.py:180 msgid "tagged item" msgstr "Élément étiqueté" #: taggit/models.py:181 msgid "tagged items" msgstr "Éléments étiquetés" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/he/000077500000000000000000000000001467620475500173675ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/he/LC_MESSAGES/000077500000000000000000000000001467620475500211545ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/he/LC_MESSAGES/django.mo000066400000000000000000000014741467620475500227610ustar00rootroot00000000000000Þ•T Œ¸¹Øø.7<C@"„8§àFå ,7%(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenamePlease provide a comma-separated list of tags.TagstagProject-Id-Version: Django Taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2010-06-26 12:54-0600 Last-Translator: Alex Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); %(object)s מתויג ×¢× %(tag)sרשימה של ×ª×’×™× ×ž×•×¤×¨×“×ª ×¢× ×¤×¡×™×§×™×.ש×× × ×œ×¡×¤×§ רשימה של ×ª×’×™× ×ž×•×¤×¨×“×ª ×¢× ×¤×¡×™×§×™×.תגיותתגdjango-taggit-6.1.0/taggit/locale/he/LC_MESSAGES/django.po000066400000000000000000000036431467620475500227640ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Django Taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:34+0900\n" "PO-Revision-Date: 2010-06-26 12:54-0600\n" "Last-Translator: Alex \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "× × ×œ×¡×¤×§ רשימה של ×ª×’×™× ×ž×•×¤×¨×“×ª ×¢× ×¤×¡×™×§×™×." #: taggit/managers.py:432 msgid "Tags" msgstr "תגיות" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "רשימה של ×ª×’×™× ×ž×•×¤×¨×“×ª ×¢× ×¤×¡×™×§×™×." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "ש×" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "" #: taggit/models.py:82 msgid "tag" msgstr "תג" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s מתויג ×¢× %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "" #: taggit/models.py:180 msgid "tagged item" msgstr "" #: taggit/models.py:181 msgid "tagged items" msgstr "" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/it/000077500000000000000000000000001467620475500174075ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/it/LC_MESSAGES/000077500000000000000000000000001467620475500211745ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/it/LC_MESSAGES/django.mo000066400000000000000000000016611467620475500227770ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï Ûè%AF-Ky} ‚‘¡   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %(object)s con tag %(tag)sUna lista di tag separati da virgola.NomeSlugFornire una lista di tag separati da virgola.TagTipoId OggettoTagOggetto con tagOggetti con tagdjango-taggit-6.1.0/taggit/locale/it/LC_MESSAGES/django.po000066400000000000000000000035601467620475500230020ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:35+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Fornire una lista di tag separati da virgola." #: taggit/managers.py:432 msgid "Tags" msgstr "Tag" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Una lista di tag separati da virgola." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Nome" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Slug" #: taggit/models.py:82 msgid "tag" msgstr "Tag" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s con tag %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Tipo" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Id Oggetto" #: taggit/models.py:180 msgid "tagged item" msgstr "Oggetto con tag" #: taggit/models.py:181 msgid "tagged items" msgstr "Oggetti con tag" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/ja/000077500000000000000000000000001467620475500173655ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/ja/LC_MESSAGES/000077500000000000000000000000001467620475500211525ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/ja/LC_MESSAGES/django.mo000066400000000000000000000021661467620475500227560ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï ÛSè<0[Œ “H  éö%!,'N   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: django-taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2014-04-23 08:05+0900 Last-Translator: Tatsuo Ikeda Language-Team: Language: ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 1.6.4 %(object)s tagged with %(tag)s複数タグã¯ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã€‚å称スラッグ複数タグã¯ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã‚’入れã¦ãã ã•ã„。タグ一覧コンテンツタイプオブジェクト IDã‚¿ã‚°ã‚¿ã‚°ä»˜ã‘æ¸ˆã¿ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚¿ã‚°ä»˜ã‘済ã¿ã®ã‚¢ã‚¤ãƒ†ãƒ ä¸€è¦§django-taggit-6.1.0/taggit/locale/ja/LC_MESSAGES/django.po000066400000000000000000000035641467620475500227640ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: django-taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:39+0900\n" "PO-Revision-Date: 2014-04-23 08:05+0900\n" "Last-Translator: Tatsuo Ikeda \n" "Language-Team: \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.6.4\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "複数タグã¯ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã‚’入れã¦ãã ã•ã„。" #: taggit/managers.py:432 msgid "Tags" msgstr "タグ一覧" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "複数タグã¯ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã®ãƒªã‚¹ãƒˆã€‚" #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "åç§°" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "スラッグ" #: taggit/models.py:82 msgid "tag" msgstr "ã‚¿ã‚°" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s tagged with %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "コンテンツタイプ" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "オブジェクト ID" #: taggit/models.py:180 msgid "tagged item" msgstr "ã‚¿ã‚°ä»˜ã‘æ¸ˆã¿ã®ã‚¢ã‚¤ãƒ†ãƒ " #: taggit/models.py:181 msgid "tagged items" msgstr "ã‚¿ã‚°ä»˜ã‘æ¸ˆã¿ã®ã‚¢ã‚¤ãƒ†ãƒ ä¸€è¦§" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/nb/000077500000000000000000000000001467620475500173725ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/nb/LC_MESSAGES/000077500000000000000000000000001467620475500211575ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/nb/LC_MESSAGES/django.mo000066400000000000000000000017411467620475500227610ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï ÛBè+Ifk,p ¤ ±»ÀÏ   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: 0.9.3 Report-Msgid-Bugs-To: PO-Revision-Date: 2012-12-08 14:42+0100 Last-Translator: Bjørn Pettersen Language-Team: Norwegian Language: Norwegian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 1.5.4 %(object)s tagget med %(tag)sEn kommaseparert tagg-liste.NavnSlugVennligst oppgi en kommaseparert tagg-liste.TaggerInnholdstypeObjekt-idTaggTagget ElementTaggede Elementerdjango-taggit-6.1.0/taggit/locale/nb/LC_MESSAGES/django.po000066400000000000000000000036331467620475500227660ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: 0.9.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:41+0900\n" "PO-Revision-Date: 2012-12-08 14:42+0100\n" "Last-Translator: Bjørn Pettersen \n" "Language-Team: Norwegian \n" "Language: Norwegian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Vennligst oppgi en kommaseparert tagg-liste." #: taggit/managers.py:432 msgid "Tags" msgstr "Tagger" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "En kommaseparert tagg-liste." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Navn" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Slug" #: taggit/models.py:82 msgid "tag" msgstr "Tagg" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s tagget med %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Innholdstype" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Objekt-id" #: taggit/models.py:180 msgid "tagged item" msgstr "Tagget Element" #: taggit/models.py:181 msgid "tagged items" msgstr "Taggede Elementer" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/nl/000077500000000000000000000000001467620475500174045ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/nl/LC_MESSAGES/000077500000000000000000000000001467620475500211715ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/nl/LC_MESSAGES/django.mo000066400000000000000000000016451467620475500227760ustar00rootroot00000000000000Þ• tÌ0P`.pŸ ¤ ± » ÇÔå)/4.9h m yƒ“  %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagged itemtagged itemsProject-Id-Version: django-taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2010-09-07 23:04+0100 Last-Translator: Jeffrey Gelens Language-Team: Dutch Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %(object)s getagged met %(tag)sEen door komma gescheiden lijst van tags.NaamSlugGeef een door komma gescheiden lijst van tags.TagsInhoudstypeObject-idObject getaggedObjecten getaggeddjango-taggit-6.1.0/taggit/locale/nl/LC_MESSAGES/django.po000066400000000000000000000033131467620475500227730ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: django-taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:41+0900\n" "PO-Revision-Date: 2010-09-07 23:04+0100\n" "Last-Translator: Jeffrey Gelens \n" "Language-Team: Dutch\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Geef een door komma gescheiden lijst van tags." #: taggit/managers.py:432 msgid "Tags" msgstr "Tags" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Een door komma gescheiden lijst van tags." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Naam" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Slug" #: taggit/models.py:82 #, fuzzy #| msgid "Tag" msgid "tag" msgstr "Tag" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s getagged met %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Inhoudstype" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Object-id" #: taggit/models.py:180 msgid "tagged item" msgstr "Object getagged" #: taggit/models.py:181 msgid "tagged items" msgstr "Objecten getagged" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/pt_BR/000077500000000000000000000000001467620475500200015ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/pt_BR/LC_MESSAGES/000077500000000000000000000000001467620475500215665ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/pt_BR/LC_MESSAGES/django.mo000066400000000000000000000020251467620475500233640ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï ÛDè-/M}‚>‡ ÆÑ ãð ù   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: django-taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2013-01-12 18:11-0200 Last-Translator: RPB Language-Team: Portuguese (Brazil) Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1) %(object)s marcados com %(tag)sUma lista de marcadores separados por vírgula.NomeSlugFavor fornecer uma lista de marcadores separados por vírgula.MarcadoresTipo de conteúdoId do objetoMarcadorItem marcadoItens marcadosdjango-taggit-6.1.0/taggit/locale/pt_BR/LC_MESSAGES/django.po000066400000000000000000000035511467620475500233740ustar00rootroot00000000000000# This file is distributed under WTFPL license. # # Translators: # RPB , 2013. msgid "" msgstr "" "Project-Id-Version: django-taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:42+0900\n" "PO-Revision-Date: 2013-01-12 18:11-0200\n" "Last-Translator: RPB \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Favor fornecer uma lista de marcadores separados por vírgula." #: taggit/managers.py:432 msgid "Tags" msgstr "Marcadores" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Uma lista de marcadores separados por vírgula." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Nome" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Slug" #: taggit/models.py:82 msgid "tag" msgstr "Marcador" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s marcados com %(tag)s" #: taggit/models.py:134 msgid "content type" msgstr "Tipo de conteúdo" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Id do objeto" #: taggit/models.py:180 msgid "tagged item" msgstr "Item marcado" #: taggit/models.py:181 msgid "tagged items" msgstr "Itens marcados" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/ru/000077500000000000000000000000001467620475500174215ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/ru/LC_MESSAGES/000077500000000000000000000000001467620475500212065ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/ru/LC_MESSAGES/django.mo000066400000000000000000000035161467620475500230120ustar00rootroot00000000000000Þ•¤,ˆ‰¨ÈØ&è5JE.¿Æ Ë Øâ æ òÿƒ7ˆ2ÀóY ^g¬Æ2s¦¯¸)Ö&E   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugAll list items must be of string type.Expected a list of items but got type "{input_type}".Invalid json list. A tag list submitted in string form must be valid json.Please provide a comma-separated list of tags.TaggitTagscontent typeobject IDtagtagged itemtagged itemstagsProject-Id-Version: Django Taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2021-09-26 00:51+0300 Last-Translator: Serghei Iakovlev Language-Team: Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; Ñлемент «%(object)s» Ñ Ñ‚ÐµÐ³Ð¾Ð¼ «%(tag)s»СпиÑок тегов через запÑтую.названиеÑлагВÑе Ñлементы ÑпиÑка должны быть Ñтрокового типа.ОжидалÑÑ ÑпиÑок Ñлементов, но получен тип «{input_type}».Ðеверный ÑпиÑок json. СпиÑок тегов, предÑтавленный в Ñтроковой форме, должен быть корректным json.Укажите теги через запÑтую.ТегиТегитип Ñодержимогоидентификатор объектатегÑлемент Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹Ñлементы Ñ Ñ‚ÐµÐ³Ð¾Ð¼Ñ‚ÐµÐ³Ð¸django-taggit-6.1.0/taggit/locale/ru/LC_MESSAGES/django.po000066400000000000000000000047601467620475500230170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Django Taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:43+0900\n" "PO-Revision-Date: 2021-09-26 00:51+0300\n" "Last-Translator: Serghei Iakovlev \n" "Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "Теги" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Укажите теги через запÑтую." #: taggit/managers.py:432 msgid "Tags" msgstr "Теги" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "СпиÑок тегов через запÑтую." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "название" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Ñлаг" #: taggit/models.py:82 msgid "tag" msgstr "тег" #: taggit/models.py:83 msgid "tags" msgstr "теги" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "Ñлемент «%(object)s» Ñ Ñ‚ÐµÐ³Ð¾Ð¼ «%(tag)s»" #: taggit/models.py:134 msgid "content type" msgstr "тип Ñодержимого" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "идентификатор объекта" #: taggit/models.py:180 msgid "tagged item" msgstr "Ñлемент Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹" #: taggit/models.py:181 msgid "tagged items" msgstr "Ñлементы Ñ Ñ‚ÐµÐ³Ð¾Ð¼" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "ОжидалÑÑ ÑпиÑок Ñлементов, но получен тип «{input_type}»." #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" "Ðеверный ÑпиÑок json. СпиÑок тегов, предÑтавленный в Ñтроковой форме, должен " "быть корректным json." #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "Ð’Ñе Ñлементы ÑпиÑка должны быть Ñтрокового типа." django-taggit-6.1.0/taggit/locale/tr/000077500000000000000000000000001467620475500174205ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/tr/LC_MESSAGES/000077500000000000000000000000001467620475500212055ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/tr/LC_MESSAGES/django.mo000066400000000000000000000020331467620475500230020ustar00rootroot00000000000000Þ• |Ü !@`p.€¯ ´ ÁË Ï ÛAè"**Mx }7‡ ¿ÉÙ èò   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.Tagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); %(object)s %(tag)s ile etiketlendiEtiketlerin virgülle ayrılmış listesi.AdıKısaltmaEtiketleri bir virgülle ayrılmış listesini veriniz.Etiketlerİçerik türüNesne kimliÄŸiEtiketlerTakip edilen ÖğeTakip edilen Öğelerdjango-taggit-6.1.0/taggit/locale/tr/LC_MESSAGES/django.po000066400000000000000000000037361467620475500230200ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:44+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Etiketleri bir virgülle ayrılmış listesini veriniz." #: taggit/managers.py:432 msgid "Tags" msgstr "Etiketler" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "Etiketlerin virgülle ayrılmış listesi." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Adı" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Kısaltma" #: taggit/models.py:82 msgid "tag" msgstr "Etiketler" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s %(tag)s ile etiketlendi" #: taggit/models.py:134 msgid "content type" msgstr "İçerik türü" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "Nesne kimliÄŸi" #: taggit/models.py:180 msgid "tagged item" msgstr "Takip edilen Öğe" #: taggit/models.py:181 msgid "tagged items" msgstr "Takip edilen Öğeler" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/uk/000077500000000000000000000000001467620475500174125ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/uk/LC_MESSAGES/000077500000000000000000000000001467620475500211775ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/uk/LC_MESSAGES/django.mo000066400000000000000000000022731467620475500230020ustar00rootroot00000000000000Þ• „ì01Pp€.¿Æ Ë Øâ æ ò‹ÿ9‹,Å òý. 5 @K_ p{ š   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugPlease provide a comma-separated list of tags.TaggitTagscontent typeobject IDtagtagged itemtagged itemsProject-Id-Version: Django Taggit Report-Msgid-Bugs-To: PO-Revision-Date: 2010-06-11 11:30+0700 Last-Translator: Igor 'idle sign' Starikov Language-Team: Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; елемент «%(object)s» з міткою «%(tag)s»СпиÑок міток через кому.ÐазваСлагВкажіть мітки через кому.МіткаМіткаТип вміÑтуID об'єктаМіткаЕлемент з міткоюЕлементи з міткоюdjango-taggit-6.1.0/taggit/locale/uk/LC_MESSAGES/django.po000066400000000000000000000041401467620475500230000ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Django Taggit\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-14 11:44+0900\n" "PO-Revision-Date: 2010-06-11 11:30+0700\n" "Last-Translator: Igor 'idle sign' Starikov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "Мітка" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "Вкажіть мітки через кому." #: taggit/managers.py:432 msgid "Tags" msgstr "Мітка" #: taggit/managers.py:433 msgid "A comma-separated list of tags." msgstr "СпиÑок міток через кому." #: taggit/models.py:19 msgctxt "A tag name" msgid "name" msgstr "Ðазва" #: taggit/models.py:22 msgctxt "A tag slug" msgid "slug" msgstr "Слаг" #: taggit/models.py:82 msgid "tag" msgstr "Мітка" #: taggit/models.py:83 msgid "tags" msgstr "" #: taggit/models.py:89 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "елемент «%(object)s» з міткою «%(tag)s»" #: taggit/models.py:134 msgid "content type" msgstr "Тип вміÑту" #: taggit/models.py:165 taggit/models.py:172 msgid "object ID" msgstr "ID об'єкта" #: taggit/models.py:180 msgid "tagged item" msgstr "Елемент з міткою" #: taggit/models.py:181 msgid "tagged items" msgstr "Елементи з міткою" #: taggit/serializers.py:40 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" #: taggit/serializers.py:43 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "" #: taggit/serializers.py:46 msgid "All list items must be of string type." msgstr "" django-taggit-6.1.0/taggit/locale/zh_Hans/000077500000000000000000000000001467620475500203655ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/zh_Hans/LC_MESSAGES/000077500000000000000000000000001467620475500221525ustar00rootroot00000000000000django-taggit-6.1.0/taggit/locale/zh_Hans/LC_MESSAGES/django.mo000066400000000000000000000027311467620475500237540ustar00rootroot00000000000000Þ•¤,ˆ‰¨ÈØ&è5JE.¿Æ Ë Øâ æ òÿ;"@c‚ ‰*–LÁY'h š ¡®· ¾ ÈÒ   %(object)s tagged with %(tag)sA comma-separated list of tags.A tag namenameA tag slugslugAll list items must be of string type.Expected a list of items but got type "{input_type}".Invalid json list. A tag list submitted in string form must be valid json.Please provide a comma-separated list of tags.TaggitTagscontent typeobject IDtagtagged itemtagged itemstagsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; %(object)s 使用了标签 %(tag)s逗å·åˆ†éš”的标签列表。å称唯一标识所有列表项必须是字符串类型。期望得到一个项目列表,但得到的是类型 “{input_type}â€ã€‚无效的 JSON åˆ—è¡¨ã€‚ä»¥å­—ç¬¦ä¸²å½¢å¼æäº¤çš„æ ‡ç­¾åˆ—è¡¨å¿…é¡»æ˜¯æœ‰æ•ˆçš„ JSON。请æä¾›é€—å·åˆ†éš”的标签列表。标签项标签内容类型对象ID标签标签项标签项标签django-taggit-6.1.0/taggit/locale/zh_Hans/LC_MESSAGES/django.po000066400000000000000000000041731467620475500237610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-01-30 16:06+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: taggit/apps.py:7 msgid "Taggit" msgstr "标签项" #: taggit/forms.py:31 msgid "Please provide a comma-separated list of tags." msgstr "请æä¾›é€—å·åˆ†éš”的标签列表。" #: taggit/managers.py:442 msgid "Tags" msgstr "标签" #: taggit/managers.py:443 msgid "A comma-separated list of tags." msgstr "逗å·åˆ†éš”的标签列表。" #: taggit/models.py:20 msgctxt "A tag name" msgid "name" msgstr "åç§°" #: taggit/models.py:23 msgctxt "A tag slug" msgid "slug" msgstr "唯一标识" #: taggit/models.py:89 msgid "tag" msgstr "标签" #: taggit/models.py:90 msgid "tags" msgstr "标签" #: taggit/models.py:96 #, python-format msgid "%(object)s tagged with %(tag)s" msgstr "%(object)s 使用了标签 %(tag)s" #: taggit/models.py:141 msgid "content type" msgstr "内容类型" #: taggit/models.py:172 taggit/models.py:179 msgid "object ID" msgstr "对象ID" #: taggit/models.py:187 msgid "tagged item" msgstr "标签项" #: taggit/models.py:188 msgid "tagged items" msgstr "标签项" #: taggit/serializers.py:53 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "期望得到一个项目列表,但得到的是类型 “{input_type}â€ã€‚" #: taggit/serializers.py:56 msgid "" "Invalid json list. A tag list submitted in string form must be valid json." msgstr "无效的 JSON åˆ—è¡¨ã€‚ä»¥å­—ç¬¦ä¸²å½¢å¼æäº¤çš„æ ‡ç­¾åˆ—è¡¨å¿…é¡»æ˜¯æœ‰æ•ˆçš„ JSON。" #: taggit/serializers.py:59 msgid "All list items must be of string type." msgstr "所有列表项必须是字符串类型。" django-taggit-6.1.0/taggit/management/000077500000000000000000000000001467620475500176505ustar00rootroot00000000000000django-taggit-6.1.0/taggit/management/commands/000077500000000000000000000000001467620475500214515ustar00rootroot00000000000000django-taggit-6.1.0/taggit/management/commands/deduplicate_tags.py000066400000000000000000000062471467620475500253350ustar00rootroot00000000000000from django.conf import settings from django.core.management.base import BaseCommand from django.db import transaction from taggit.models import Tag, TaggedItem class Command(BaseCommand): help = "Identify and remove duplicate tags based on case insensitivity" def handle(self, *args, **kwargs): if not getattr(settings, "TAGGIT_CASE_INSENSITIVE", False): self.stdout.write( self.style.ERROR("TAGGIT_CASE_INSENSITIVE is not enabled.") ) return tags = Tag.objects.all() tag_dict = {} for tag in tags: lower_name = tag.name.lower() if lower_name in tag_dict: existing_tag = tag_dict[lower_name] self._deduplicate_tags(existing_tag=existing_tag, tag_to_remove=tag) else: tag_dict[lower_name] = tag self.stdout.write(self.style.SUCCESS("Tag deduplication complete.")) @transaction.atomic def _deduplicate_tags(self, existing_tag, tag_to_remove): """ Remove a tag by merging it into an existing tag """ # If this ends up very slow for you, please file a ticket! # This isn't trying to be performant, in order to keep the code simple. for item in TaggedItem.objects.filter(tag=tag_to_remove): # if we already have the same association on the model # (via the existing tag), then we can just remove the # tagged item. tag_exists_other = TaggedItem.objects.filter( tag=existing_tag, content_type_id=item.content_type_id, object_id=item.object_id, ).exists() if tag_exists_other: item.delete() else: item.tag = existing_tag item.save() # this should never trigger, but can never be too sure assert not TaggedItem.objects.filter( tag=tag_to_remove ).exists(), "Tags were not all cleaned up!" tag_to_remove.delete() def _collect_tagged_items(self, tag, existing_tag, tagged_items_to_update): for item in TaggedItem.objects.filter(tag=tag): tagged_items_to_update[(item.content_type_id, item.object_id)].append( existing_tag.id ) def _remove_duplicates_and_update(self, tagged_items_to_update): with transaction.atomic(): for (content_type_id, object_id), tag_ids in tagged_items_to_update.items(): unique_tag_ids = set(tag_ids) if len(unique_tag_ids) > 1: first_tag_id = unique_tag_ids.pop() for duplicate_tag_id in unique_tag_ids: TaggedItem.objects.filter( content_type_id=content_type_id, object_id=object_id, tag_id=duplicate_tag_id, ).delete() TaggedItem.objects.filter( content_type_id=content_type_id, object_id=object_id, tag_id=first_tag_id, ).update(tag_id=first_tag_id) django-taggit-6.1.0/taggit/management/commands/remove_orphaned_tags.py000066400000000000000000000005651467620475500262240ustar00rootroot00000000000000from django.core.management.base import BaseCommand from taggit.models import Tag class Command(BaseCommand): help = "Remove orphaned tags" def handle(self, *args, **options): orphaned_tags = Tag.objects.filter(taggit_taggeditem_items=None) count = orphaned_tags.delete() self.stdout.write(f"Successfully removed {count} orphaned tags") django-taggit-6.1.0/taggit/managers.py000066400000000000000000000671511467620475500177150ustar00rootroot00000000000000import uuid from operator import attrgetter from django.conf import settings from django.contrib.contenttypes.fields import GenericRelation from django.contrib.contenttypes.models import ContentType from django.core.exceptions import MultipleObjectsReturned from django.db import connections, models, router from django.db.models import signals from django.db.models.fields.related import ( ManyToManyRel, OneToOneRel, RelatedField, lazy_related_operation, ) from django.db.models.query_utils import PathInfo from django.utils.functional import cached_property from django.utils.text import capfirst from django.utils.translation import gettext_lazy as _ from taggit.forms import TagField from taggit.models import ( CommonGenericTaggedItemBase, GenericUUIDTaggedItemBase, TaggedItem, ) from taggit.utils import require_instance_manager class ExtraJoinRestriction: """ An extra restriction used for contenttype restriction in joins. """ contains_aggregate = False contains_over_clause = False def __init__(self, alias, col, content_types): self.alias = alias self.col = col self.content_types = content_types def as_sql(self, compiler, connection): qn = compiler.quote_name_unless_alias if len(self.content_types) == 1: extra_where = f"{qn(self.alias)}.{qn(self.col)} = %s" else: extra_where = "{}.{} IN ({})".format( qn(self.alias), qn(self.col), ",".join(["%s"] * len(self.content_types)) ) return extra_where, self.content_types def relabel_aliases(self, change_map): self.alias = change_map.get(self.alias, self.alias) def clone(self): return type(self)(self.alias, self.col, self.content_types[:]) class _TaggableManager(models.Manager): # TODO investigate whether we can use a RelatedManager instead of all this stuff # to take advantage of all the Django goodness def __init__(self, through, model, instance, prefetch_cache_name, ordering=None): super().__init__() self.through = through self.model = model self.instance = instance self.prefetch_cache_name = prefetch_cache_name if ordering is not None: self.ordering = ordering elif instance: # When working off an instance (i.e. instance.tags.all()) # we default to ordering by the PK of the through table # # (This ordering does not apply for queries at the model # level, i.e. Model.tags.all()) related_name = self.through.tag.field.related_query_name() self.ordering = [f"{related_name}__pk"] else: self.ordering = [] def is_cached(self, instance): return self.prefetch_cache_name in instance._prefetched_objects_cache def get_queryset(self, extra_filters=None): try: return self.instance._prefetched_objects_cache[self.prefetch_cache_name] except (AttributeError, KeyError): kwargs = extra_filters if extra_filters else {} return self.through.tags_for(self.model, self.instance, **kwargs).order_by( *self.ordering ) def get_prefetch_queryset(self, instances, queryset=None): if queryset is None: return self.get_prefetch_querysets(instances) else: return self.get_prefetch_querysets(instances, [queryset]) def get_prefetch_querysets(self, instances, querysets=None): if querysets is not None: # this queryset is meant to be used for filtering down the prefetch # this work has not been done yet. # # Some hint from Django: asserting that len(querysets) == 1 if it's not None # and then using that to filter down the qs raise ValueError("Custom querysets can't be used for this lookup.") instance = instances[0] db = self._db or router.db_for_read(type(instance), instance=instance) fieldname = ( "object_id" if issubclass(self.through, CommonGenericTaggedItemBase) else "content_object" ) fk = self.through._meta.get_field(fieldname) query = { "%s__%s__in" % (self.through.tag_relname(), fk.name): { obj._get_pk_val() for obj in instances } } join_table = self.through._meta.db_table source_col = fk.column connection = connections[db] qn = connection.ops.quote_name qs = ( self.get_queryset(query) .using(db) .extra( select={ "_prefetch_related_val": "{}.{}".format( qn(join_table), qn(source_col) ) } ) ) if issubclass(self.through, GenericUUIDTaggedItemBase): def uuid_rel_obj_attr(v): value = attrgetter("_prefetch_related_val")(v) if value is not None and not isinstance(value, uuid.UUID): input_form = "int" if isinstance(value, int) else "hex" value = uuid.UUID(**{input_form: value}) return value rel_obj_attr = uuid_rel_obj_attr else: rel_obj_attr = attrgetter("_prefetch_related_val") return ( qs, rel_obj_attr, lambda obj: obj._get_pk_val(), False, self.prefetch_cache_name, False, ) def _lookup_kwargs(self): return self.through.lookup_kwargs(self.instance) def _remove_prefetched_objects(self): prefetch_cache = getattr(self.instance, "_prefetched_objects_cache", None) if prefetch_cache: prefetch_cache.pop(self.prefetch_cache_name, None) @require_instance_manager def add(self, *tags, through_defaults=None, tag_kwargs=None, **kwargs): self._remove_prefetched_objects() if tag_kwargs is None: tag_kwargs = {} db = router.db_for_write(self.through, instance=self.instance) tag_objs = self._to_tag_model_instances(tags, tag_kwargs) new_ids = {t.pk for t in tag_objs} # NOTE: can we hardcode 'tag_id' here or should the column name be got # dynamically from somewhere? vals = ( self.through._default_manager.using(db) .values_list("tag_id", flat=True) .filter(**self._lookup_kwargs()) ) new_ids = new_ids - set(vals) signals.m2m_changed.send( sender=self.through, action="pre_add", instance=self.instance, reverse=False, model=self.through.tag_model(), pk_set=new_ids, using=db, ) for tag in tag_objs: self.through._default_manager.using(db).get_or_create( tag=tag, **self._lookup_kwargs(), defaults=through_defaults ) signals.m2m_changed.send( sender=self.through, action="post_add", instance=self.instance, reverse=False, model=self.through.tag_model(), pk_set=new_ids, using=db, ) def _to_tag_model_instances(self, tags, tag_kwargs): """ Takes an iterable containing either strings, tag objects, or a mixture of both and returns a list of tag objects while preserving order. """ db = router.db_for_write(self.through, instance=self.instance) case_insensitive = getattr(settings, "TAGGIT_CASE_INSENSITIVE", False) manager = self.through.tag_model()._default_manager.using(db) # tags can be instances of our through models, or strings tag_strs = [tag for tag in tags if isinstance(tag, str)] # This map from tag names to tags lets us handle deduplication # without doing extra queries along the way, all while relying on # data we were going to pull out of the database anyways # existing_tags_for_str[tag_name] = tag existing_tags_for_str = {} # we are going to first try and lookup existing tags (in a single query) if case_insensitive: # Some databases can do case-insensitive comparison with IN, which # would be faster, but we can't rely on it or easily detect it existing = [] tags_to_create = [] for name in tag_strs: try: tag = manager.get(name__iexact=name, **tag_kwargs) existing_tags_for_str[name] = tag except self.through.tag_model().DoesNotExist: tags_to_create.append(name) except MultipleObjectsReturned: tag = ( manager.filter(name__iexact=name, **tag_kwargs) .order_by("pk") .first() ) existing_tags_for_str[name] = tag else: # Django is smart enough to not actually query if tag_strs is empty # but importantly, this is a single query for all potential tags existing = manager.filter(name__in=tag_strs, **tag_kwargs) # we're going to end up doing this query anyways, so here is fine for t in existing: existing_tags_for_str[t.name] = t result = [] # this set is used for deduplicating tags seen_tags = set() for t in tags: if isinstance(t, self.through.tag_model()): if t not in seen_tags: seen_tags.add(t) result.append(t) elif isinstance(t, str): # we are using a string, so either the tag exists (and we have the lookup) # or we need to create the value existing_tag = existing_tags_for_str.get(t, None) if existing_tag is None: # we need to create a tag # (we use get_or_create to handle potential races) if case_insensitive: lookup = {"name__iexact": t, **tag_kwargs} else: lookup = {"name": t, **tag_kwargs} existing_tag, _ = manager.get_or_create( **lookup, defaults={"name": t} ) # we now have an existing tag for this string # confirm if we've seen it or not (this is where case insensitivity comes # into play) if existing_tag not in seen_tags: seen_tags.add(existing_tag) result.append(existing_tag) else: raise ValueError( "Cannot add {} ({}). Expected {} or str.".format( t, type(t), type(self.through.tag_model()) ) ) return result @require_instance_manager def names(self): return self.get_queryset().values_list("name", flat=True) @require_instance_manager def slugs(self): return self.get_queryset().values_list("slug", flat=True) @require_instance_manager def set(self, tags, *, through_defaults=None, **kwargs): """ Set the object's tags to the given n tags. If the clear kwarg is True then all existing tags are removed (using `.clear()`) and the new tags added. Otherwise, only those tags that are not present in the args are removed and any new tags added. Any kwarg apart from 'clear' will be passed when adding tags. """ db = router.db_for_write(self.through, instance=self.instance) clear = kwargs.pop("clear", False) tag_kwargs = kwargs.pop("tag_kwargs", {}) if clear: self.clear() self.add(*tags, **kwargs) else: # make sure we're working with a collection of a uniform type objs = self._to_tag_model_instances(tags, tag_kwargs) # get the existing tag strings old_tag_strs = set( self.through._default_manager.using(db) .filter(**self._lookup_kwargs()) .values_list("tag__name", flat=True) ) new_objs = [] for obj in objs: if obj.name in old_tag_strs: old_tag_strs.remove(obj.name) else: new_objs.append(obj) self.remove(*old_tag_strs) self.add(*new_objs, through_defaults=through_defaults, **kwargs) @require_instance_manager def remove(self, *tags): if not tags: return self._remove_prefetched_objects() db = router.db_for_write(self.through, instance=self.instance) qs = ( self.through._default_manager.using(db) .filter(**self._lookup_kwargs()) .filter(tag__name__in=tags) ) old_ids = set(qs.values_list("tag_id", flat=True)) signals.m2m_changed.send( sender=self.through, action="pre_remove", instance=self.instance, reverse=False, model=self.through.tag_model(), pk_set=old_ids, using=db, ) qs.delete() signals.m2m_changed.send( sender=self.through, action="post_remove", instance=self.instance, reverse=False, model=self.through.tag_model(), pk_set=old_ids, using=db, ) @require_instance_manager def clear(self): self._remove_prefetched_objects() db = router.db_for_write(self.through, instance=self.instance) signals.m2m_changed.send( sender=self.through, action="pre_clear", instance=self.instance, reverse=False, model=self.through.tag_model(), pk_set=None, using=db, ) self.through._default_manager.using(db).filter(**self._lookup_kwargs()).delete() signals.m2m_changed.send( sender=self.through, action="post_clear", instance=self.instance, reverse=False, model=self.through.tag_model(), pk_set=None, using=db, ) def most_common(self, min_count=None, extra_filters=None): queryset = ( self.get_queryset(extra_filters) .annotate(num_times=models.Count(self.through.tag_relname())) .order_by("-num_times") ) if min_count: queryset = queryset.filter(num_times__gte=min_count) return queryset @require_instance_manager def similar_objects(self): lookup_kwargs = self._lookup_kwargs() lookup_keys = sorted(lookup_kwargs) qs = self.through.objects.values(*lookup_kwargs.keys()) qs = qs.annotate(n=models.Count("pk")) qs = qs.exclude(**lookup_kwargs) qs = qs.filter(tag__in=self.all()) qs = qs.order_by("-n") # TODO: This all feels like a bit of a hack. items = {} if len(lookup_keys) == 1: # Can we do this without a second query by using a select_related() # somehow? f = self.through._meta.get_field(lookup_keys[0]) remote_field = f.remote_field rel_model = remote_field.model objs = rel_model._default_manager.filter( **{ "%s__in" % remote_field.field_name: [r["content_object"] for r in qs] } ) actual_remote_field_name = f.target_field.get_attname() for obj in objs: items[(getattr(obj, actual_remote_field_name),)] = obj else: preload = {} for result in qs: preload.setdefault(result["content_type"], set()) preload[result["content_type"]].add(result["object_id"]) for ct, obj_ids in preload.items(): ct = ContentType.objects.get_for_id(ct) for obj in ct.model_class()._default_manager.filter(pk__in=obj_ids): items[(ct.pk, obj.pk)] = obj results = [] for result in qs: obj = items[tuple(result[k] for k in lookup_keys)] obj.similar_tags = result["n"] results.append(obj) return results class TaggableManager(RelatedField): # Field flags many_to_many = True many_to_one = False one_to_many = False one_to_one = False _related_name_counter = 0 def __init__( self, verbose_name=_("Tags"), help_text=_("A comma-separated list of tags."), through=None, blank=False, related_name=None, to=None, ordering=None, manager=_TaggableManager, ): self.through = through or TaggedItem rel = ManyToManyRel(self, to, related_name=related_name, through=self.through) super().__init__( verbose_name=verbose_name, help_text=help_text, blank=blank, null=True, serialize=False, rel=rel, ) self.ordering = ordering self.swappable = False self.manager = manager def __get__(self, instance, model): if instance is not None and instance.pk is None: raise ValueError( "%s objects need to have a primary key value " "before you can access their tags." % model.__name__ ) return self.manager( through=self.through, model=model, instance=instance, prefetch_cache_name=self.name, ordering=self.ordering, ) def deconstruct(self): """ Deconstruct the object, used with migrations. """ name, path, args, kwargs = super().deconstruct() # Remove forced kwargs. for kwarg in ("serialize", "null"): del kwargs[kwarg] # Add arguments related to relations. # Ref: https://github.com/jazzband/django-taggit/issues/206#issuecomment-37578676 rel = self.remote_field if isinstance(rel.through, str): kwargs["through"] = rel.through elif not rel.through._meta.auto_created: kwargs["through"] = "{}.{}".format( rel.through._meta.app_label, rel.through._meta.object_name ) related_model = rel.model if isinstance(related_model, str): kwargs["to"] = related_model else: kwargs["to"] = "{}.{}".format( related_model._meta.app_label, related_model._meta.object_name ) return name, path, args, kwargs def contribute_to_class(self, cls, name): self.set_attributes_from_name(name) self.model = cls self.opts = cls._meta cls._meta.add_field(self) setattr(cls, name, self) if not cls._meta.abstract: if isinstance(self.remote_field.model, str): def resolve_related_class(cls, model, field): field.remote_field.model = model lazy_related_operation( resolve_related_class, cls, self.remote_field.model, field=self ) if isinstance(self.through, str): def resolve_related_class(cls, model, field): self.through = model self.remote_field.through = model self.post_through_setup(cls) lazy_related_operation( resolve_related_class, cls, self.through, field=self ) else: self.post_through_setup(cls) def get_internal_type(self): return "ManyToManyField" def post_through_setup(self, cls): self.use_gfk = self.through is None or issubclass( self.through, CommonGenericTaggedItemBase ) if not self.remote_field.model: self.remote_field.model = self.through._meta.get_field( "tag" ).remote_field.model if self.use_gfk: tagged_items = GenericRelation(self.through) tagged_items.contribute_to_class(cls, "tagged_items") for rel in cls._meta.local_many_to_many: if rel == self or not isinstance(rel, TaggableManager): continue if rel.through == self.through: raise ValueError( "You can't have two TaggableManagers with the" " same through model." ) def save_form_data(self, instance, value): getattr(instance, self.name).set(value) def formfield(self, form_class=TagField, **kwargs): defaults = { "label": capfirst(self.verbose_name), "help_text": self.help_text, "required": not self.blank, } defaults.update(kwargs) return form_class(**defaults) def value_from_object(self, obj): if obj.pk is None: return [] qs = self.through.objects.select_related("tag").filter( **self.through.lookup_kwargs(obj) ) return [ti.tag for ti in qs] def m2m_reverse_name(self): return self.through._meta.get_field("tag").column def m2m_reverse_field_name(self): return self.through._meta.get_field("tag").name def m2m_target_field_name(self): return self.model._meta.pk.name def m2m_reverse_target_field_name(self): return self.remote_field.model._meta.pk.name def m2m_column_name(self): if self.use_gfk: return self.through._meta.private_fields[0].fk_field return self.through._meta.get_field("content_object").column def m2m_db_table(self): return self.through._meta.db_table def bulk_related_objects(self, new_objs, using): return [] def _get_mm_case_path_info(self, direct=False, filtered_relation=None): pathinfos = [] linkfield1 = self.through._meta.get_field("content_object") linkfield2 = self.through._meta.get_field(self.m2m_reverse_field_name()) if not filtered_relation: # Django >= 4.1 provides cached path_infos and reverse_path_infos properties # to use in preference to get_path_info / get_reverse_path_info when not # passing a filtered_relation if direct: join1infos = linkfield1.reverse_path_infos join2infos = linkfield2.path_infos else: join1infos = linkfield2.reverse_path_infos join2infos = linkfield1.path_infos else: if direct: join1infos = linkfield1.get_reverse_path_info( filtered_relation=filtered_relation ) join2infos = linkfield2.get_path_info( filtered_relation=filtered_relation ) else: join1infos = linkfield2.get_reverse_path_info( filtered_relation=filtered_relation ) join2infos = linkfield1.get_path_info( filtered_relation=filtered_relation ) pathinfos.extend(join1infos) pathinfos.extend(join2infos) return pathinfos def _get_gfk_case_path_info(self, direct=False, filtered_relation=None): pathinfos = [] from_field = self.model._meta.pk opts = self.through._meta linkfield = self.through._meta.get_field(self.m2m_reverse_field_name()) if direct: join1infos = [ PathInfo( self.model._meta, opts, [from_field], self.remote_field, True, False, filtered_relation, ) ] if not filtered_relation: join2infos = linkfield.path_infos else: join2infos = linkfield.get_path_info( filtered_relation=filtered_relation ) else: if not filtered_relation: join1infos = linkfield.reverse_path_infos else: join1infos = linkfield.get_reverse_path_info( filtered_relation=filtered_relation ) join2infos = [ PathInfo( opts, self.model._meta, [from_field], self, True, False, filtered_relation, ) ] pathinfos.extend(join1infos) pathinfos.extend(join2infos) return pathinfos def get_path_info(self, filtered_relation=None): if self.use_gfk: return self._get_gfk_case_path_info( direct=True, filtered_relation=filtered_relation ) else: return self._get_mm_case_path_info( direct=True, filtered_relation=filtered_relation ) @cached_property def path_infos(self): return self.get_path_info() def get_reverse_path_info(self, filtered_relation=None): if self.use_gfk: return self._get_gfk_case_path_info( direct=False, filtered_relation=filtered_relation ) else: return self._get_mm_case_path_info( direct=False, filtered_relation=filtered_relation ) @cached_property def reverse_path_infos(self): return self.get_reverse_path_info() def get_joining_columns(self, reverse_join=False): # RemovedInDjango60Warning # https://github.com/django/django/commit/8b1ff0da4b162e87edebd94e61f2cd153e9e159d if reverse_join: return ((self.model._meta.pk.column, "object_id"),) else: return (("object_id", self.model._meta.pk.column),) def get_joining_fields(self, reverse_join=False): if reverse_join: return ( ( self.model._meta.pk, self.remote_field.through._meta.get_field("object_id"), ), ) else: return ( ( self.remote_field.through._meta.get_field("object_id"), self.model._meta.pk, ), ) def get_extra_restriction(self, alias, related_alias): extra_col = self.through._meta.get_field("content_type").column content_type_ids = [ ContentType.objects.get_for_model(subclass).pk for subclass in _get_subclasses(self.model) ] return ExtraJoinRestriction(related_alias, extra_col, content_type_ids) def get_reverse_joining_columns(self): # RemovedInDjango60Warning # https://github.com/django/django/commit/8b1ff0da4b162e87edebd94e61f2cd153e9e159d return self.get_joining_columns(reverse_join=True) def get_reverse_joining_fields(self): return self.get_joining_fields(reverse_join=True) @property def related_fields(self): return [(self.through._meta.get_field("object_id"), self.model._meta.pk)] @property def foreign_related_fields(self): return [self.related_fields[0][1]] def _get_subclasses(model): subclasses = [model] for field in model._meta.get_fields(): if isinstance(field, OneToOneRel) and getattr( field.field.remote_field, "parent_link", None ): subclasses.extend(_get_subclasses(field.related_model)) return subclasses django-taggit-6.1.0/taggit/migrations/000077500000000000000000000000001467620475500177105ustar00rootroot00000000000000django-taggit-6.1.0/taggit/migrations/0001_initial.py000066400000000000000000000051711467620475500223570ustar00rootroot00000000000000from django.db import migrations, models class Migration(migrations.Migration): dependencies = [("contenttypes", "0001_initial")] operations = [ migrations.CreateModel( name="Tag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, help_text="", verbose_name="ID", ), ), ( "name", models.CharField( help_text="", unique=True, max_length=100, verbose_name="name" ), ), ( "slug", models.SlugField( help_text="", unique=True, max_length=100, verbose_name="slug" ), ), ], options={"verbose_name": "tag", "verbose_name_plural": "tags"}, bases=(models.Model,), ), migrations.CreateModel( name="TaggedItem", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, help_text="", verbose_name="ID", ), ), ( "object_id", models.IntegerField( help_text="", verbose_name="object ID", db_index=True ), ), ( "content_type", models.ForeignKey( related_name="taggit_taggeditem_tagged_items", verbose_name="content type", to="contenttypes.ContentType", help_text="", on_delete=models.CASCADE, ), ), ( "tag", models.ForeignKey( related_name="taggit_taggeditem_items", to="taggit.Tag", help_text="", on_delete=models.CASCADE, ), ), ], options={ "verbose_name": "tagged item", "verbose_name_plural": "tagged items", }, bases=(models.Model,), ), ] django-taggit-6.1.0/taggit/migrations/0002_auto_20150616_2121.py000066400000000000000000000015061467620475500233260ustar00rootroot00000000000000from django.db import migrations, models class Migration(migrations.Migration): dependencies = [("taggit", "0001_initial")] operations = [ # this migration was modified from previously being # a ModifyIndexTogether operation. # # If you are a long-enough user of this library, the name # of the index does not match what is written here. Please # query the DB itself to find out what the name originally was. migrations.AddIndex( "taggeditem", models.Index( fields=("content_type", "object_id"), # this is not the name of the index in previous version, # but this is necessary to deal with index_together issues. name="taggit_tagg_content_8fc721_idx", ), ) ] django-taggit-6.1.0/taggit/migrations/0003_taggeditem_add_unique_index.py000066400000000000000000000013311467620475500264210ustar00rootroot00000000000000from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("contenttypes", "0002_remove_content_type_name"), ("taggit", "0002_auto_20150616_2121"), ] operations = [ # this migration was modified to declare a uniqueness constraint differently # this change was written on 2023-09-20, if any issues occurred from this please report it upstream migrations.AddConstraint( model_name="taggeditem", constraint=models.UniqueConstraint( fields=("content_type", "object_id", "tag"), name="taggit_taggeditem_content_type_id_object_id_tag_id_4bb97a8e_uniq", ), ), ] django-taggit-6.1.0/taggit/migrations/0004_alter_taggeditem_content_type_alter_taggeditem_tag.py000066400000000000000000000023031467620475500332330ustar00rootroot00000000000000# This migration has no effect in practice. It exists to stop # Django from autodetecting migrations in taggit when users # update to Django 4.0. # See https://docs.djangoproject.com/en/stable/releases/4.0/#migrations-autodetector-changes import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("contenttypes", "0002_remove_content_type_name"), ("taggit", "0003_taggeditem_add_unique_index"), ] operations = [ migrations.AlterField( model_name="taggeditem", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="taggeditem", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), ] django-taggit-6.1.0/taggit/migrations/0005_auto_20220424_2025.py000066400000000000000000000007611467620475500233310ustar00rootroot00000000000000# Generated by Django 2.2.26 on 2022-04-24 20:25 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"), ] operations = [ migrations.AlterField( model_name="tag", name="slug", field=models.SlugField( allow_unicode=True, max_length=100, unique=True, verbose_name="slug" ), ), ] 0006_rename_taggeditem_content_type_object_id_taggit_tagg_content_8fc721_idx.py000066400000000000000000000006331467620475500370410ustar00rootroot00000000000000django-taggit-6.1.0/taggit/migrations# Generated by Django 4.2.5 on 2023-09-19 23:16 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("taggit", "0005_auto_20220424_2025"), ] operations = [ migrations.RenameIndex( model_name="taggeditem", new_name="taggit_tagg_content_8fc721_idx", old_fields=("content_type", "object_id"), ), ] django-taggit-6.1.0/taggit/migrations/__init__.py000066400000000000000000000000001467620475500220070ustar00rootroot00000000000000django-taggit-6.1.0/taggit/models.py000066400000000000000000000155701467620475500174010ustar00rootroot00000000000000from django.conf import settings from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import IntegrityError, models, router, transaction from django.utils.text import slugify from django.utils.translation import gettext from django.utils.translation import gettext_lazy as _ from django.utils.translation import pgettext_lazy try: from unidecode import unidecode except ImportError: def unidecode(tag): return tag class NaturalKeyManager(models.Manager): def get_by_natural_key(self, *args): if len(args) != len(self.model.natural_key_fields): raise ValueError( "Number of arguments does not match number of natural key fields." ) lookup_kwargs = dict(zip(self.model.natural_key_fields, args)) return self.get(**lookup_kwargs) class NaturalKeyModel(models.Model): def natural_key(self): return [getattr(self, field) for field in self.natural_key_fields] class Meta: abstract = True class TagBase(NaturalKeyModel): name = models.CharField( verbose_name=pgettext_lazy("A tag name", "name"), unique=True, max_length=100 ) slug = models.SlugField( verbose_name=pgettext_lazy("A tag slug", "slug"), unique=True, max_length=100, allow_unicode=True, ) natural_key_fields = ["name"] objects = NaturalKeyManager() def __str__(self): return self.name def __gt__(self, other): return self.name.lower() > other.name.lower() def __lt__(self, other): return self.name.lower() < other.name.lower() class Meta: abstract = True def save(self, *args, **kwargs): if self._state.adding and not self.slug: self.slug = self.slugify(self.name) using = kwargs.get("using") or router.db_for_write( type(self), instance=self ) # Make sure we write to the same db for all attempted writes, # with a multi-master setup, theoretically we could try to # write and rollback on different DBs kwargs["using"] = using # Be opportunistic and try to save the tag, this should work for # most cases ;) try: with transaction.atomic(using=using): res = super().save(*args, **kwargs) return res except IntegrityError: pass # Now try to find existing slugs with similar names slugs = set( type(self) ._default_manager.filter(slug__startswith=self.slug) .values_list("slug", flat=True) ) i = 1 while True: slug = self.slugify(self.name, i) if slug not in slugs: self.slug = slug # We purposely ignore concurrency issues here for now. # (That is, till we found a nice solution...) return super().save(*args, **kwargs) i += 1 else: return super().save(*args, **kwargs) def slugify(self, tag, i=None): if getattr(settings, "TAGGIT_STRIP_UNICODE_WHEN_SLUGIFYING", False): slug = slugify(unidecode(tag)) else: slug = slugify(tag, allow_unicode=True) if i is not None: slug += "_%d" % i return slug class Tag(TagBase): class Meta: verbose_name = _("tag") verbose_name_plural = _("tags") app_label = "taggit" class ItemBase(NaturalKeyModel): def __str__(self): return gettext("%(object)s tagged with %(tag)s") % { "object": self.content_object, "tag": self.tag, } objects = NaturalKeyManager() class Meta: abstract = True @classmethod def tag_model(cls): field = cls._meta.get_field("tag") return field.remote_field.model @classmethod def tag_relname(cls): field = cls._meta.get_field("tag") return field.remote_field.related_name @classmethod def lookup_kwargs(cls, instance): return {"content_object": instance} @classmethod def tags_for(cls, model, instance=None, **extra_filters): kwargs = extra_filters or {} if instance is not None: kwargs.update({"%s__content_object" % cls.tag_relname(): instance}) return cls.tag_model().objects.filter(**kwargs) kwargs.update({"%s__content_object__isnull" % cls.tag_relname(): False}) return cls.tag_model().objects.filter(**kwargs).distinct() class TaggedItemBase(ItemBase): tag = models.ForeignKey( Tag, related_name="%(app_label)s_%(class)s_items", on_delete=models.CASCADE ) class Meta: abstract = True class CommonGenericTaggedItemBase(ItemBase): content_type = models.ForeignKey( ContentType, on_delete=models.CASCADE, verbose_name=_("content type"), related_name="%(app_label)s_%(class)s_tagged_items", ) content_object = GenericForeignKey() class Meta: abstract = True @classmethod def lookup_kwargs(cls, instance): return { "object_id": instance.pk, "content_type": ContentType.objects.get_for_model(instance), } @classmethod def tags_for(cls, model, instance=None, **extra_filters): tag_relname = cls.tag_relname() model = model._meta.concrete_model kwargs = { "%s__content_type__app_label" % tag_relname: model._meta.app_label, "%s__content_type__model" % tag_relname: model._meta.model_name, } if instance is not None: kwargs["%s__object_id" % tag_relname] = instance.pk if extra_filters: kwargs.update(extra_filters) return cls.tag_model().objects.filter(**kwargs).distinct() class GenericTaggedItemBase(CommonGenericTaggedItemBase): object_id = models.IntegerField(verbose_name=_("object ID"), db_index=True) natural_key_fields = ["object_id"] class Meta: abstract = True class GenericUUIDTaggedItemBase(CommonGenericTaggedItemBase): object_id = models.UUIDField(verbose_name=_("object ID"), db_index=True) natural_key_fields = ["object_id"] class Meta: abstract = True class TaggedItem(GenericTaggedItemBase, TaggedItemBase): class Meta: verbose_name = _("tagged item") verbose_name_plural = _("tagged items") app_label = "taggit" indexes = [ models.Index( fields=["content_type", "object_id"], ) ] constraints = [ models.UniqueConstraint( fields=("content_type", "object_id", "tag"), name="taggit_taggeditem_content_type_id_object_id_tag_id_4bb97a8e_uniq", ) ] django-taggit-6.1.0/taggit/serializers.py000066400000000000000000000104371467620475500204470ustar00rootroot00000000000000""" Django-taggit serializer support Originally vendored from https://github.com/glemmaPaul/django-taggit-serializer """ import json # Third party from django.utils.translation import gettext_lazy from rest_framework import serializers class TagList(list): """ This tag list subclass adds pretty printing support to the tag list serializer """ def __init__(self, *args, **kwargs): pretty_print = kwargs.pop("pretty_print", True) super().__init__(*args, **kwargs) self.pretty_print = pretty_print def __add__(self, rhs): return TagList(super().__add__(rhs)) def __getitem__(self, item): result = super().__getitem__(item) try: return TagList(result) except TypeError: return result def __str__(self): if self.pretty_print: return json.dumps(self, sort_keys=True, indent=4, separators=(",", ": ")) else: return json.dumps(self) class TagListSerializerField(serializers.ListField): """ A serializer field that can write out a tag list This serializer field has some odd qualities compared to just using a ListField. If this field poses problems, we should introduce a new field that is a simpler ListField implementation with less features. """ child = serializers.CharField() default_error_messages = { "not_a_list": gettext_lazy( 'Expected a list of items but got type "{input_type}".' ), "invalid_json": gettext_lazy( "Invalid json list. A tag list submitted in string" " form must be valid json." ), "not_a_str": gettext_lazy("All list items must be of string type."), } order_by = None def __init__(self, **kwargs): pretty_print = kwargs.pop("pretty_print", True) style = kwargs.pop("style", {}) kwargs["style"] = {"base_template": "textarea.html"} kwargs["style"].update(style) super().__init__(**kwargs) self.pretty_print = pretty_print def to_internal_value(self, value): # note to future maintainers: this field used to not be a ListField # and has extra behavior to support string-based input. # # In the future we should look at removing this feature so we can # make this a simple ListField (if feasible) if isinstance(value, str): if not value: value = "[]" try: value = json.loads(value) except ValueError: self.fail("invalid_json") if not isinstance(value, list): self.fail("not_a_list", input_type=type(value).__name__) for s in value: if not isinstance(s, str): self.fail("not_a_str") self.child.run_validation(s) return value def to_representation(self, value): if not isinstance(value, TagList): if not isinstance(value, list): if self.order_by: tags = value.all().order_by(*self.order_by) else: tags = value.all() value = [tag.name for tag in tags] value = TagList(value, pretty_print=self.pretty_print) return value class TaggitSerializer(serializers.Serializer): def create(self, validated_data): to_be_tagged, validated_data = self._pop_tags(validated_data) tag_object = super().create(validated_data) return self._save_tags(tag_object, to_be_tagged) def update(self, instance, validated_data): to_be_tagged, validated_data = self._pop_tags(validated_data) tag_object = super().update(instance, validated_data) return self._save_tags(tag_object, to_be_tagged) def _save_tags(self, tag_object, tags): for key in tags.keys(): tag_values = tags.get(key) getattr(tag_object, key).set(tag_values) return tag_object def _pop_tags(self, validated_data): to_be_tagged = {} for key in self.fields.keys(): field = self.fields[key] if isinstance(field, TagListSerializerField): if key in validated_data: to_be_tagged[key] = validated_data.pop(key) return (to_be_tagged, validated_data) django-taggit-6.1.0/taggit/templates/000077500000000000000000000000001467620475500175325ustar00rootroot00000000000000django-taggit-6.1.0/taggit/templates/admin/000077500000000000000000000000001467620475500206225ustar00rootroot00000000000000django-taggit-6.1.0/taggit/templates/admin/taggit/000077500000000000000000000000001467620475500221015ustar00rootroot00000000000000django-taggit-6.1.0/taggit/templates/admin/taggit/merge_tags_form.html000066400000000000000000000015311467620475500261270ustar00rootroot00000000000000{% extends "admin/base.html" %} {% block content %}
{% csrf_token %} {% for field in form %}
{{ field.label_tag }} {{ field }} {% if field.errors %}
    {% for error in field.errors %}
  • {{ error }}
  • {% endfor %}
{% endif %}
{% endfor %}

Enter new or existing tag name

{% endblock %} django-taggit-6.1.0/taggit/utils.py000066400000000000000000000103071467620475500172470ustar00rootroot00000000000000from django.conf import settings from django.utils.functional import wraps from django.utils.module_loading import import_string def _parse_tags(tagstring): """ Parses tag input, with multiple word input being activated and delineated by commas and double quotes. Quotes take precedence, so they may contain commas. Returns a sorted list of unique tag names. Ported from Jonathan Buchanan's `django-tagging `_ """ if not tagstring: return [] # Special case - if there are no commas or double quotes in the # input, we don't *do* a recall... I mean, we know we only need to # split on spaces. if "," not in tagstring and '"' not in tagstring: words = list(set(split_strip(tagstring, " "))) words.sort() return words words = [] buffer = [] # Defer splitting of non-quoted sections until we know if there are # any unquoted commas. to_be_split = [] saw_loose_comma = False open_quote = False i = iter(tagstring) try: while True: c = next(i) if c == '"': if buffer: to_be_split.append("".join(buffer)) buffer = [] # Find the matching quote open_quote = True c = next(i) while c != '"': buffer.append(c) c = next(i) if buffer: word = "".join(buffer).strip() if word: words.append(word) buffer = [] open_quote = False else: if not saw_loose_comma and c == ",": saw_loose_comma = True buffer.append(c) except StopIteration: # If we were parsing an open quote which was never closed treat # the buffer as unquoted. if buffer: if open_quote and "," in buffer: saw_loose_comma = True to_be_split.append("".join(buffer)) if to_be_split: if saw_loose_comma: delimiter = "," else: delimiter = " " for chunk in to_be_split: words.extend(split_strip(chunk, delimiter)) words = list(set(words)) words.sort() return words def split_strip(string, delimiter=","): """ Splits ``string`` on ``delimiter``, stripping each resulting string and returning a list of non-empty strings. Ported from Jonathan Buchanan's `django-tagging `_ """ if not string: return [] words = [w.strip() for w in string.split(delimiter)] return [w for w in words if w] def _edit_string_for_tags(tags): """ Given list of ``Tag`` instances, creates a string representation of the list suitable for editing by the user, such that submitting the given string representation back without changing it will give the same list of tags. Tag names which contain commas will be double quoted. If any tag name which isn't being quoted contains whitespace, the resulting string of tag names will be comma-delimited, otherwise it will be space-delimited. Ported from Jonathan Buchanan's `django-tagging `_ """ names = [] for tag in tags: name = tag.name if "," in name or " " in name: names.append('"%s"' % name) else: names.append(name) return ", ".join(sorted(names)) def require_instance_manager(func): @wraps(func) def inner(self, *args, **kwargs): if self.instance is None: raise TypeError("Can't call %s with a non-instance manager" % func.__name__) return func(self, *args, **kwargs) return inner def get_func(key, default): func_path = getattr(settings, key, None) return default if func_path is None else import_string(func_path) def parse_tags(tagstring): func = get_func("TAGGIT_TAGS_FROM_STRING", _parse_tags) return func(tagstring) def edit_string_for_tags(tags): func = get_func("TAGGIT_STRING_FROM_TAGS", _edit_string_for_tags) return func(tags) django-taggit-6.1.0/taggit/views.py000066400000000000000000000027721467620475500172530ustar00rootroot00000000000000from django.contrib.contenttypes.models import ContentType from django.shortcuts import get_object_or_404 from django.views.generic.list import ListView from taggit.models import Tag, TaggedItem def tagged_object_list(request, slug, queryset, **kwargs): if callable(queryset): queryset = queryset() kwargs["slug"] = slug tag_list_view = type( "TagListView", (TagListMixin, ListView), {"model": queryset.model, "queryset": queryset}, ) return tag_list_view.as_view()(request, **kwargs) class TagListMixin: tag_suffix = "_tag" def dispatch(self, request, *args, **kwargs): slug = kwargs.pop("slug") self.tag = get_object_or_404(Tag, slug=slug) return super().dispatch(request, *args, **kwargs) def get_queryset(self, **kwargs): qs = super().get_queryset(**kwargs) return qs.filter( pk__in=TaggedItem.objects.filter( tag=self.tag, content_type=ContentType.objects.get_for_model(qs.model) ).values_list("object_id", flat=True) ) def get_template_names(self): if self.tag_suffix: self.template_name_suffix = self.tag_suffix + self.template_name_suffix return super().get_template_names() def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) if "extra_context" not in context: context["extra_context"] = {} context["extra_context"]["tag"] = self.tag return context django-taggit-6.1.0/tests/000077500000000000000000000000001467620475500154175ustar00rootroot00000000000000django-taggit-6.1.0/tests/__init__.py000066400000000000000000000000001467620475500175160ustar00rootroot00000000000000django-taggit-6.1.0/tests/admin.py000066400000000000000000000001311467620475500170540ustar00rootroot00000000000000from django.contrib import admin from . import models admin.site.register(models.Food) django-taggit-6.1.0/tests/custom_parser.py000066400000000000000000000002501467620475500206540ustar00rootroot00000000000000def comma_splitter(tag_string): return [t.strip() for t in tag_string.split(",") if t.strip()] def comma_joiner(tags): return ", ".join(t.name for t in tags) django-taggit-6.1.0/tests/forms.py000066400000000000000000000015021467620475500171150ustar00rootroot00000000000000from django import forms from .models import ( BlankTagModel, CustomPKFood, DirectCustomPKFood, DirectFood, Food, OfficialFood, ) class BlankTagForm(forms.ModelForm): class Meta: model = BlankTagModel fields = "__all__" class FoodForm(forms.ModelForm): class Meta: model = Food fields = "__all__" class DirectFoodForm(forms.ModelForm): class Meta: model = DirectFood fields = "__all__" class DirectCustomPKFoodForm(forms.ModelForm): class Meta: model = DirectCustomPKFood fields = "__all__" class CustomPKFoodForm(forms.ModelForm): class Meta: model = CustomPKFood fields = "__all__" class OfficialFoodForm(forms.ModelForm): class Meta: model = OfficialFood fields = "__all__" django-taggit-6.1.0/tests/migrations/000077500000000000000000000000001467620475500175735ustar00rootroot00000000000000django-taggit-6.1.0/tests/migrations/0001_initial.py000066400000000000000000001150161467620475500222420ustar00rootroot00000000000000import uuid import django.db.models.deletion from django.db import migrations, models import taggit.managers class Migration(migrations.Migration): initial = True dependencies = [ ("taggit", "0003_taggeditem_add_unique_index"), ("contenttypes", "0002_remove_content_type_name"), ] operations = [ migrations.CreateModel( name="Article", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("title", models.CharField(max_length=100)), ], ), migrations.CreateModel( name="CustomManager", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], ), migrations.CreateModel( name="CustomPKFood", fields=[ ( "name", models.CharField(max_length=50, primary_key=True, serialize=False), ) ], ), migrations.CreateModel( name="CustomPKPet", fields=[ ( "name", models.CharField(max_length=50, primary_key=True, serialize=False), ) ], ), migrations.CreateModel( name="DirectCustomPKFood", fields=[ ( "name", models.CharField(max_length=50, primary_key=True, serialize=False), ) ], ), migrations.CreateModel( name="DirectCustomPKPet", fields=[ ( "name", models.CharField(max_length=50, primary_key=True, serialize=False), ) ], ), migrations.CreateModel( name="DirectFood", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="DirectPet", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="DirectTrackedFood", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="DirectTrackedPet", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="BlankTagModel", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="Food", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="Movie", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], options={"abstract": False}, ), migrations.CreateModel( name="MultipleTags", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], ), migrations.CreateModel( name="MultipleTagsGFK", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], ), migrations.CreateModel( name="Name", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], ), migrations.CreateModel( name="OfficialFood", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="OfficialPet", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="OfficialTag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "name", models.CharField(max_length=100, unique=True, verbose_name="Name"), ), ( "slug", models.SlugField(max_length=100, unique=True, verbose_name="Slug"), ), ("official", models.BooleanField(default=False)), ], options={"abstract": False}, ), migrations.CreateModel( name="OfficialThroughModel", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "object_id", models.IntegerField(db_index=True, verbose_name="Object id"), ), ( "content_type", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_officialthroughmodel_tagged_items", to="contenttypes.ContentType", verbose_name="Content type", ), ), ( "tag", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tagged_items", to="tests.OfficialTag", ), ), ("extra_field", models.CharField(max_length=10)), ], ), migrations.CreateModel( name="TrackedTag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "name", models.CharField(max_length=100, unique=True, verbose_name="Name"), ), ( "slug", models.SlugField(max_length=100, unique=True, verbose_name="Slug"), ), ("created_by", models.CharField(max_length=50)), ("created_dt", models.DateTimeField(auto_now_add=True)), ( "description", models.TextField(blank=True, max_length=255, null=True), ), ], options={"abstract": False}, ), migrations.CreateModel( name="Parent", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], ), migrations.CreateModel( name="Pet", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="Photo", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], options={"abstract": False}, ), migrations.CreateModel( name="ProxyPhoto", fields=[], options={"proxy": True, "indexes": []}, bases=("tests.photo",), ), migrations.CreateModel( name="TaggedCustomPK", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "object_id", models.CharField( db_index=True, max_length=50, verbose_name="Object id" ), ), ( "content_type", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedcustompk_tagged_items", to="contenttypes.ContentType", verbose_name="Content type", ), ), ], ), migrations.CreateModel( name="TaggedCustomPKFood", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "content_object", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.DirectCustomPKFood", ), ), ], ), migrations.CreateModel( name="TaggedCustomPKPet", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], ), migrations.CreateModel( name="TaggedFood", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "content_object", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.DirectFood", ), ), ], ), migrations.CreateModel( name="TaggedPet", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ) ], options={"abstract": False}, ), migrations.CreateModel( name="TaggedTrackedFood", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "content_object", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.DirectTrackedFood", ), ), ("created_by", models.CharField(max_length=50)), ("created_dt", models.DateTimeField(auto_now_add=True)), ], ), migrations.CreateModel( name="TaggedTrackedPet", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("created_by", models.CharField(max_length=50)), ("created_dt", models.DateTimeField(auto_now_add=True)), ], options={"abstract": False}, ), migrations.CreateModel( name="Through1", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "content_object", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.MultipleTags", ), ), ], options={"abstract": False}, ), migrations.CreateModel( name="Through2", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "content_object", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.MultipleTags", ), ), ], options={"abstract": False}, ), migrations.CreateModel( name="ThroughGFK", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "object_id", models.IntegerField(db_index=True, verbose_name="Object id"), ), ( "content_type", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_throughgfk_tagged_items", to="contenttypes.ContentType", verbose_name="Content type", ), ), ], options={"abstract": False}, ), migrations.CreateModel( name="UUIDFood", fields=[ ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="UUIDTag", fields=[ ( "name", models.CharField(max_length=100, unique=True, verbose_name="Name"), ), ( "slug", models.SlugField(max_length=100, unique=True, verbose_name="Slug"), ), ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ], options={"abstract": False}, ), migrations.CreateModel( name="UUIDTaggedItem", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "object_id", models.UUIDField(db_index=True, verbose_name="Object id"), ), ( "content_type", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_uuidtaggeditem_tagged_items", to="contenttypes.ContentType", verbose_name="Content type", ), ), ( "tag", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_uuidtaggeditem_items", to="tests.UUIDTag", ), ), ], options={"abstract": False}, ), migrations.CreateModel( name="ArticleTag", fields=[], options={"proxy": True, "indexes": []}, bases=("taggit.tag",), ), migrations.CreateModel( name="ArticleTaggedItem", fields=[], options={"proxy": True, "indexes": []}, bases=("taggit.taggeditem",), ), migrations.CreateModel( name="Child", fields=[ ( "parent_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.Parent", ), ) ], bases=("tests.parent",), ), migrations.CreateModel( name="CustomPKHousePet", fields=[ ( "custompkpet_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.CustomPKPet", ), ), ("trained", models.BooleanField(default=False)), ], bases=("tests.custompkpet",), ), migrations.CreateModel( name="DirectCustomPKHousePet", fields=[ ( "directcustompkpet_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.DirectCustomPKPet", ), ), ("trained", models.BooleanField(default=False)), ], bases=("tests.directcustompkpet",), ), migrations.CreateModel( name="DirectHousePet", fields=[ ( "directpet_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.DirectPet", ), ), ("trained", models.BooleanField(default=False)), ], bases=("tests.directpet",), ), migrations.CreateModel( name="HousePet", fields=[ ( "pet_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.Pet", ), ), ("trained", models.BooleanField(default=False)), ], bases=("tests.pet",), ), migrations.CreateModel( name="OfficialHousePet", fields=[ ( "officialpet_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.OfficialPet", ), ), ("trained", models.BooleanField(default=False)), ], bases=("tests.officialpet",), ), migrations.CreateModel( name="DirectTrackedHousePet", fields=[ ( "directtrackedpet_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.DirectTrackedPet", ), ), ("trained", models.BooleanField(default=False)), ], bases=("tests.directtrackedpet",), ), migrations.AddField( model_name="uuidfood", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.UUIDTaggedItem", to="tests.UUIDTag", verbose_name="Tags", ), ), migrations.AddField( model_name="throughgfk", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tagged_items", to="taggit.Tag", ), ), migrations.AddField( model_name="through2", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_through2_items", to="taggit.Tag", ), ), migrations.AddField( model_name="through1", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_through1_items", to="taggit.Tag", ), ), migrations.AddField( model_name="taggedpet", name="content_object", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.DirectPet" ), ), migrations.AddField( model_name="taggedpet", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedpet_items", to="taggit.Tag", ), ), migrations.AddField( model_name="taggedfood", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedfood_items", to="taggit.Tag", ), ), migrations.AddField( model_name="taggedtrackedpet", name="content_object", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.DirectTrackedPet" ), ), migrations.AddField( model_name="taggedtrackedpet", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedtrackedpet_items", to="tests.TrackedTag", ), ), migrations.AddField( model_name="taggedtrackedfood", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedtrackedfood_items", to="tests.TrackedTag", ), ), migrations.AddField( model_name="taggedcustompkpet", name="content_object", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="tests.DirectCustomPKPet", ), ), migrations.AddField( model_name="taggedcustompkpet", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedcustompkpet_items", to="taggit.Tag", ), ), migrations.AddField( model_name="taggedcustompkfood", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedcustompkfood_items", to="taggit.Tag", ), ), migrations.AddField( model_name="taggedcustompk", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedcustompk_items", to="taggit.Tag", ), ), migrations.AddField( model_name="photo", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="pet", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="parent", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="officialpet", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.OfficialThroughModel", to="tests.OfficialTag", verbose_name="Tags", ), ), migrations.AddField( model_name="officialfood", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.OfficialThroughModel", to="tests.OfficialTag", verbose_name="Tags", ), ), migrations.AddField( model_name="name", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", related_name="a_unique_related_name", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="multipletagsgfk", name="tags1", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", related_name="tagsgfk1", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="multipletagsgfk", name="tags2", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", related_name="tagsgfk2", through="tests.ThroughGFK", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="multipletags", name="tags1", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", related_name="tags1", through="tests.Through1", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="multipletags", name="tags2", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", related_name="tags2", through="tests.Through2", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="movie", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="food", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="directpet", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedPet", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="directfood", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedFood", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="directtrackedpet", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedTrackedPet", to="tests.TrackedTag", verbose_name="Tags", ), ), migrations.AddField( model_name="directtrackedfood", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedTrackedFood", to="tests.TrackedTag", verbose_name="Tags", ), ), migrations.AddField( model_name="directcustompkpet", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedCustomPKPet", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="directcustompkfood", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedCustomPKFood", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="custompkpet", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedCustomPK", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="custompkfood", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TaggedCustomPK", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="custommanager", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="article", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.ArticleTaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AlterUniqueTogether( name="taggedfood", unique_together={("content_object", "tag")} ), migrations.AlterUniqueTogether( name="taggedtrackedfood", unique_together={("content_object", "tag")} ), migrations.AlterUniqueTogether( name="taggedcustompkpet", unique_together={("content_object", "tag")} ), migrations.AlterUniqueTogether( name="taggedcustompkfood", unique_together={("content_object", "tag")} ), migrations.AlterUniqueTogether( name="taggedcustompk", unique_together={("object_id", "tag")} ), migrations.AlterUniqueTogether( name="officialthroughmodel", unique_together={("content_type", "object_id", "tag")}, ), ] django-taggit-6.1.0/tests/migrations/0002_auto_20200214_1129.py000066400000000000000000000066601467620475500232140ustar00rootroot00000000000000# Generated by Django 3.0.3 on 2020-02-14 11:29 import uuid import django.utils.timezone from django.db import migrations, models import taggit.managers class Migration(migrations.Migration): dependencies = [ ("taggit", "0003_taggeditem_add_unique_index"), ("contenttypes", "0002_remove_content_type_name"), ("tests", "0001_initial"), ] operations = [ migrations.CreateModel( name="UUIDPet", fields=[ ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ("name", models.CharField(max_length=50)), ("created_at", models.DateTimeField(auto_now_add=True)), ], options={"ordering": ["created_at"]}, ), migrations.AlterModelOptions( name="uuidfood", options={"ordering": ["created_at"]} ), migrations.AddField( model_name="blanktagmodel", name="tags", field=taggit.managers.TaggableManager( blank=True, help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), migrations.AddField( model_name="uuidfood", name="created_at", field=models.DateTimeField( auto_now_add=True, default=django.utils.timezone.now ), preserve_default=False, ), migrations.AlterField( model_name="taggedtrackedfood", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="taggedtrackedfood_items", to="tests.TrackedTag", ), ), migrations.AlterField( model_name="taggedtrackedpet", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="taggedtrackedpet_items", to="tests.TrackedTag", ), ), migrations.AlterUniqueTogether( name="uuidtaggeditem", unique_together={("content_type", "object_id", "tag")}, ), migrations.CreateModel( name="UUIDHousePet", fields=[ ( "uuidpet_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.UUIDPet", ), ), ("trained", models.BooleanField(default=False)), ], bases=("tests.uuidpet",), ), migrations.AddField( model_name="uuidpet", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.UUIDTaggedItem", to="tests.UUIDTag", verbose_name="Tags", ), ), ] django-taggit-6.1.0/tests/migrations/0003_auto_20210310_0918.py000066400000000000000000000056621467620475500232210ustar00rootroot00000000000000# Generated by Django 3.1.7 on 2021-03-10 09:18 import django.db.models.deletion from django.db import migrations, models import taggit.managers class Migration(migrations.Migration): dependencies = [ ("taggit", "0003_taggeditem_add_unique_index"), ("contenttypes", "0002_remove_content_type_name"), ("tests", "0002_auto_20200214_1129"), ] operations = [ migrations.CreateModel( name="BaseFood", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ], ), migrations.CreateModel( name="MultiInheritanceFood", fields=[ ( "basefood_ptr", models.OneToOneField( auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to="tests.basefood", ), ), ], bases=("tests.basefood",), ), migrations.CreateModel( name="MultiInheritanceLazyResolutionFoodTag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "tag", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_multiinheritancelazyresolutionfoodtag_items", to="taggit.tag", ), ), ( "content_object", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tagged_items", to="tests.multiinheritancefood", ), ), ], options={ "unique_together": {("content_object", "tag")}, }, ), migrations.AddField( model_name="multiinheritancefood", name="tags", field=taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.MultiInheritanceLazyResolutionFoodTag", to="taggit.Tag", verbose_name="Tags", ), ), ] django-taggit-6.1.0/tests/migrations/0004_auto_20210619_0826.py000066400000000000000000000105031467620475500232220ustar00rootroot00000000000000# Generated by Django 3.2.4 on 2021-06-19 08:26 import django.db.models.deletion from django.db import migrations, models import taggit.managers class Migration(migrations.Migration): dependencies = [ ("contenttypes", "0002_remove_content_type_name"), ("taggit", "0003_taggeditem_add_unique_index"), ("tests", "0003_auto_20210310_0918"), ] operations = [ migrations.AlterField( model_name="officialtag", name="name", field=models.CharField(max_length=100, unique=True, verbose_name="name"), ), migrations.AlterField( model_name="officialtag", name="slug", field=models.SlugField(max_length=100, unique=True, verbose_name="slug"), ), migrations.AlterField( model_name="officialthroughmodel", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_officialthroughmodel_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="officialthroughmodel", name="object_id", field=models.IntegerField(db_index=True, verbose_name="object ID"), ), migrations.AlterField( model_name="taggedcustompk", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_taggedcustompk_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="throughgfk", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_throughgfk_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="throughgfk", name="object_id", field=models.IntegerField(db_index=True, verbose_name="object ID"), ), migrations.AlterField( model_name="trackedtag", name="name", field=models.CharField(max_length=100, unique=True, verbose_name="name"), ), migrations.AlterField( model_name="trackedtag", name="slug", field=models.SlugField(max_length=100, unique=True, verbose_name="slug"), ), migrations.AlterField( model_name="uuidtag", name="name", field=models.CharField(max_length=100, unique=True, verbose_name="name"), ), migrations.AlterField( model_name="uuidtag", name="slug", field=models.SlugField(max_length=100, unique=True, verbose_name="slug"), ), migrations.AlterField( model_name="uuidtaggeditem", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_uuidtaggeditem_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="uuidtaggeditem", name="object_id", field=models.UUIDField(db_index=True, verbose_name="object ID"), ), migrations.CreateModel( name="TestModel", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "tags", taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), ], ), ] django-taggit-6.1.0/tests/migrations/0005_auto_20210713_2301.py000066400000000000000000000017601467620475500232110ustar00rootroot00000000000000# Generated by Django 3.2.4 on 2021-06-19 08:26 from django.db import migrations, models import taggit.managers class Migration(migrations.Migration): dependencies = [ ("tests", "0004_auto_20210619_0826"), ] operations = [ migrations.CreateModel( name="OrderedModel", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "tags", taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="taggit.TaggedItem", to="taggit.Tag", verbose_name="Tags", ), ), ], ), ] django-taggit-6.1.0/tests/migrations/0006_auto_20230622_0834.py000066400000000000000000000075361467620475500232330ustar00rootroot00000000000000# Generated by Django 3.2.19 on 2023-06-22 08:34 import django.db.models.deletion from django.db import migrations, models import taggit.managers class Migration(migrations.Migration): dependencies = [ ("contenttypes", "0002_remove_content_type_name"), ("tests", "0005_auto_20210713_2301"), ] operations = [ migrations.CreateModel( name="TenantTag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100)), ("slug", models.SlugField(allow_unicode=True, max_length=100)), ("tenant_id", models.IntegerField()), ], options={ "unique_together": {("name", "tenant_id"), ("slug", "tenant_id")}, }, ), migrations.AlterField( model_name="officialtag", name="slug", field=models.SlugField( allow_unicode=True, max_length=100, unique=True, verbose_name="slug" ), ), migrations.AlterField( model_name="trackedtag", name="slug", field=models.SlugField( allow_unicode=True, max_length=100, unique=True, verbose_name="slug" ), ), migrations.AlterField( model_name="uuidtag", name="slug", field=models.SlugField( allow_unicode=True, max_length=100, unique=True, verbose_name="slug" ), ), migrations.CreateModel( name="TenantTaggedItem", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "object_id", models.IntegerField(db_index=True, verbose_name="object ID"), ), ( "content_type", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_tenanttaggeditem_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), ( "tag", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="tests_tenanttaggeditem_items", to="tests.tenanttag", ), ), ], options={ "abstract": False, }, ), migrations.CreateModel( name="TenantModel", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=50)), ( "tags", taggit.managers.TaggableManager( help_text="A comma-separated list of tags.", through="tests.TenantTaggedItem", to="tests.TenantTag", verbose_name="Tags", ), ), ], ), ] 0007_alter_multiinheritancelazyresolutionfoodtag_tag_and_more.py000066400000000000000000000137351467620475500343670ustar00rootroot00000000000000django-taggit-6.1.0/tests/migrations# Generated by Django 4.2 on 2023-07-24 00:05 import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("contenttypes", "0002_remove_content_type_name"), ("taggit", "0005_auto_20220424_2025"), ("tests", "0006_auto_20230622_0834"), ] operations = [ migrations.AlterField( model_name="multiinheritancelazyresolutionfoodtag", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="officialthroughmodel", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="taggedcustompk", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="taggedcustompk", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="taggedcustompkfood", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="taggedcustompkpet", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="taggedfood", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="taggedpet", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="taggedtrackedfood", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(class)s_items", to="tests.trackedtag", ), ), migrations.AlterField( model_name="taggedtrackedpet", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(class)s_items", to="tests.trackedtag", ), ), migrations.AlterField( model_name="tenanttaggeditem", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="tenanttaggeditem", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="tests.tenanttag", ), ), migrations.AlterField( model_name="through1", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="through2", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="taggit.tag", ), ), migrations.AlterField( model_name="throughgfk", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="uuidtaggeditem", name="content_type", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_tagged_items", to="contenttypes.contenttype", verbose_name="content type", ), ), migrations.AlterField( model_name="uuidtaggeditem", name="tag", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="%(app_label)s_%(class)s_items", to="tests.uuidtag", ), ), ] django-taggit-6.1.0/tests/migrations/__init__.py000066400000000000000000000000001467620475500216720ustar00rootroot00000000000000django-taggit-6.1.0/tests/models.py000066400000000000000000000245411467620475500172620ustar00rootroot00000000000000import uuid from django.db import models from taggit.managers import TaggableManager from taggit.models import ( CommonGenericTaggedItemBase, GenericTaggedItemBase, GenericUUIDTaggedItemBase, ItemBase, Tag, TagBase, TaggedItem, TaggedItemBase, ) # base test model class TestModel(models.Model): tags = TaggableManager() # Ensure that two TaggableManagers with custom through model are allowed. class Through1(TaggedItemBase): content_object = models.ForeignKey("MultipleTags", on_delete=models.CASCADE) class Through2(TaggedItemBase): content_object = models.ForeignKey("MultipleTags", on_delete=models.CASCADE) class MultipleTags(models.Model): tags1 = TaggableManager(through=Through1, related_name="tags1") tags2 = TaggableManager(through=Through2, related_name="tags2") # Ensure that two TaggableManagers with GFK via different through models are allowed. class ThroughGFK(GenericTaggedItemBase): tag = models.ForeignKey(Tag, related_name="tagged_items", on_delete=models.CASCADE) class MultipleTagsGFK(models.Model): tags1 = TaggableManager(related_name="tagsgfk1") tags2 = TaggableManager(through=ThroughGFK, related_name="tagsgfk2") class BlankTagModel(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(blank=True) def __str__(self): return self.name class Food(models.Model): name = models.CharField(max_length=50) tags = TaggableManager() def __str__(self): return self.name class BaseFood(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name class MultiInheritanceLazyResolutionFoodTag(TaggedItemBase): content_object = models.ForeignKey( "MultiInheritanceFood", related_name="tagged_items", on_delete=models.CASCADE ) class Meta: unique_together = [["content_object", "tag"]] class MultiInheritanceFood(BaseFood): tags = TaggableManager(through=MultiInheritanceLazyResolutionFoodTag) def __str__(self): return self.name class Pet(models.Model): name = models.CharField(max_length=50) tags = TaggableManager() def __str__(self): return self.name class HousePet(Pet): trained = models.BooleanField(default=False) # Test direct-tagging with custom through model class TaggedFood(TaggedItemBase): content_object = models.ForeignKey("DirectFood", on_delete=models.CASCADE) class Meta: unique_together = [["content_object", "tag"]] class TaggedPet(TaggedItemBase): content_object = models.ForeignKey("DirectPet", on_delete=models.CASCADE) class DirectFood(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(through="TaggedFood") def __str__(self): return self.name class DirectPet(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(through=TaggedPet) def __str__(self): return self.name class DirectHousePet(DirectPet): trained = models.BooleanField(default=False) # Test direct-tagging with custom through model and custom tag class TrackedTag(TagBase): created_by = models.CharField(max_length=50) created_dt = models.DateTimeField(auto_now_add=True) description = models.TextField(blank=True, max_length=255, null=True) class TaggedTrackedFood(ItemBase): content_object = models.ForeignKey("DirectTrackedFood", on_delete=models.CASCADE) tag = models.ForeignKey( TrackedTag, on_delete=models.CASCADE, related_name="%(class)s_items" ) created_by = models.CharField(max_length=50) created_dt = models.DateTimeField(auto_now_add=True) class Meta: unique_together = ["content_object", "tag"] class TaggedTrackedPet(ItemBase): content_object = models.ForeignKey("DirectTrackedPet", on_delete=models.CASCADE) tag = models.ForeignKey( TrackedTag, on_delete=models.CASCADE, related_name="%(class)s_items" ) created_by = models.CharField(max_length=50) created_dt = models.DateTimeField(auto_now_add=True) class DirectTrackedFood(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(through=TaggedTrackedFood) def __str__(self): return self.name class DirectTrackedPet(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(through=TaggedTrackedPet) def __str__(self): return self.name class DirectTrackedHousePet(DirectTrackedPet): trained = models.BooleanField(default=False) # Test custom through model to model with custom PK class TaggedCustomPKFood(TaggedItemBase): content_object = models.ForeignKey("DirectCustomPKFood", on_delete=models.CASCADE) class Meta: unique_together = [["content_object", "tag"]] class TaggedCustomPKPet(TaggedItemBase): content_object = models.ForeignKey("DirectCustomPKPet", on_delete=models.CASCADE) class Meta: unique_together = [["content_object", "tag"]] class DirectCustomPKFood(models.Model): name = models.CharField(max_length=50, primary_key=True) tags = TaggableManager(through=TaggedCustomPKFood) def __str__(self): return self.name class DirectCustomPKPet(models.Model): name = models.CharField(max_length=50, primary_key=True) tags = TaggableManager(through=TaggedCustomPKPet) def __str__(self): return self.name class DirectCustomPKHousePet(DirectCustomPKPet): trained = models.BooleanField(default=False) # Test custom through model to model with custom PK using GenericForeignKey class TaggedCustomPK(CommonGenericTaggedItemBase, TaggedItemBase): object_id = models.CharField(max_length=50, verbose_name="Object id", db_index=True) class Meta: unique_together = [["object_id", "tag"]] class CustomPKFood(models.Model): name = models.CharField(max_length=50, primary_key=True) tags = TaggableManager(through=TaggedCustomPK) def __str__(self): return self.name class CustomPKPet(models.Model): name = models.CharField(max_length=50, primary_key=True) tags = TaggableManager(through=TaggedCustomPK) def __str__(self): return self.name class CustomPKHousePet(CustomPKPet): trained = models.BooleanField(default=False) # Test custom through model to a custom tag model class OfficialTag(TagBase): official = models.BooleanField(default=False) class OfficialThroughModel(GenericTaggedItemBase): tag = models.ForeignKey( OfficialTag, related_name="tagged_items", on_delete=models.CASCADE ) extra_field = models.CharField(max_length=10) class Meta: unique_together = [["content_type", "object_id", "tag"]] class OfficialFood(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(through=OfficialThroughModel) def __str__(self): return self.name class OfficialPet(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(through=OfficialThroughModel) def __str__(self): return self.name class OfficialHousePet(OfficialPet): trained = models.BooleanField(default=False) class Media(models.Model): tags = TaggableManager() class Meta: abstract = True class Photo(Media): pass class Movie(Media): pass class ProxyPhoto(Photo): class Meta: proxy = True class ArticleTag(Tag): class Meta: proxy = True def slugify(self, tag, i=None): slug = "category-%s" % tag.lower() if i is not None: slug += "-%d" % i return slug class ArticleTaggedItem(TaggedItem): class Meta: proxy = True @classmethod def tag_model(self): return ArticleTag class Article(models.Model): title = models.CharField(max_length=100) tags = TaggableManager(through=ArticleTaggedItem) class CustomManager(models.Model): class Foo: def __init__(*args, **kwargs): pass tags = TaggableManager(manager=Foo) class Parent(models.Model): tags = TaggableManager() class Child(Parent): pass class UUIDFood(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=50) tags = TaggableManager(through="UUIDTaggedItem") created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name class Meta: # With a UUIDField pk, objects are not always ordered by creation time. So explicitly set ordering. ordering = ["created_at"] class UUIDPet(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=50) tags = TaggableManager(through="UUIDTaggedItem") created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name class Meta: # With a UUIDField pk, objects are not always ordered by creation time. So explicitly set ordering. ordering = ["created_at"] class UUIDHousePet(UUIDPet): trained = models.BooleanField(default=False) class UUIDTag(TagBase): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) class UUIDTaggedItem(GenericUUIDTaggedItemBase): tag = models.ForeignKey( UUIDTag, related_name="%(app_label)s_%(class)s_items", on_delete=models.CASCADE ) class Meta: unique_together = [["content_type", "object_id", "tag"]] class TenantTag(TagBase): name = models.CharField(max_length=100) slug = models.SlugField(max_length=100, allow_unicode=True) tenant_id = models.IntegerField() class Meta: unique_together = [["name", "tenant_id"], ["slug", "tenant_id"]] class TenantTaggedItem(GenericTaggedItemBase): tag = models.ForeignKey( TenantTag, related_name="%(app_label)s_%(class)s_items", on_delete=models.CASCADE, ) class TenantModel(models.Model): name = models.CharField(max_length=50) tags = TaggableManager(through=TenantTaggedItem) # Exists to verify system check failure. # tests.Name.tags: (fields.E303) Reverse query name for 'Name.tags' clashes with field name 'Tag.name'. # HINT: Rename field 'Tag.name', or add/change a related_name argument to the definition for field 'Name.tags'. class Name(models.Model): tags = TaggableManager(related_name="a_unique_related_name") class OrderedModel(models.Model): tags = TaggableManager(ordering=["name"]) django-taggit-6.1.0/tests/serializers.py000066400000000000000000000005051467620475500203250ustar00rootroot00000000000000from rest_framework import serializers from taggit.serializers import TaggitSerializer, TagListSerializerField from .models import TestModel class TestModelSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField() class Meta: model = TestModel fields = "__all__" django-taggit-6.1.0/tests/settings.py000066400000000000000000000025001467620475500176260ustar00rootroot00000000000000SECRET_KEY = "secretkey" INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "taggit", "tests", ] MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ] ROOT_URLCONF = "tests.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ] }, } ] DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": ":memory:"}} STATIC_URL = "/static/" DEFAULT_AUTO_FIELD = "django.db.models.AutoField" USE_TZ = True django-taggit-6.1.0/tests/templates/000077500000000000000000000000001467620475500174155ustar00rootroot00000000000000django-taggit-6.1.0/tests/templates/tests/000077500000000000000000000000001467620475500205575ustar00rootroot00000000000000django-taggit-6.1.0/tests/templates/tests/food_tag_list.html000066400000000000000000000001741467620475500242640ustar00rootroot00000000000000 Title django-taggit-6.1.0/tests/test_admin.py000066400000000000000000000055461467620475500201320ustar00rootroot00000000000000from django.contrib.auth.models import User from django.test import TestCase from django.urls import reverse from taggit.models import Tag from .models import Food class AdminTest(TestCase): def setUp(self): super().setUp() self.apple = Food.objects.create(name="apple") self.apple.tags.add("Red", "red") self.pear = Food.objects.create(name="pear") self.pear.tags.add("red", "RED") self.peach = Food.objects.create(name="peach") self.peach.tags.add("red", "Yellow") user = User.objects.create_superuser( username="admin", email="admin@mailinator.com", password="password" ) self.client.force_login(user) def test_get_changelist(self): response = self.client.get(reverse("admin:tests_food_changelist")) self.assertEqual(response.status_code, 200) def test_get_add(self): response = self.client.get(reverse("admin:tests_food_add")) self.assertEqual(response.status_code, 200) def test_get_history(self): response = self.client.get( reverse("admin:tests_food_history", args=(self.apple.pk,)) ) self.assertEqual(response.status_code, 200) def test_get_delete(self): response = self.client.get( reverse("admin:tests_food_delete", args=(self.apple.pk,)) ) self.assertEqual(response.status_code, 200) def test_get_change(self): response = self.client.get( reverse("admin:tests_food_change", args=(self.apple.pk,)) ) self.assertEqual(response.status_code, 200) def test_tag_merging(self): response = self.client.get(reverse("admin:taggit_tag_changelist")) # merging red and RED into Red pks_to_select = [Tag.objects.get(name="red").pk, Tag.objects.get(name="RED").pk] response = self.client.post( reverse("admin:taggit_tag_changelist"), data={"action": "render_tag_form", "_selected_action": pks_to_select}, ) # we're redirecting self.assertEqual(response.status_code, 302) # make sure what we expected got into the session keys assert "selected_tag_ids" in self.client.session.keys() self.assertEqual( self.client.session["selected_tag_ids"], ",".join(map(str, pks_to_select)) ) # let's do the actual merge operation response = self.client.post( reverse("admin:taggit_tag_merge_tags"), {"new_tag_name": "Red"} ) self.assertEqual(response.status_code, 302) # time to check the result of the merges self.assertSetEqual({tag.name for tag in self.apple.tags.all()}, {"Red"}) self.assertSetEqual({tag.name for tag in self.pear.tags.all()}, {"Red"}) self.assertSetEqual( {tag.name for tag in self.peach.tags.all()}, {"Yellow", "Red"} ) django-taggit-6.1.0/tests/test_deduplicate_tags.py000066400000000000000000000043611467620475500223350ustar00rootroot00000000000000from io import StringIO from django.conf import settings from django.core.management import call_command from django.test import TestCase from taggit.models import Tag, TaggedItem from tests.models import Food, HousePet class DeduplicateTagsTests(TestCase): def setUp(self): settings.TAGGIT_CASE_INSENSITIVE = True self.tag1 = Tag.objects.create(name="Python") self.tag2 = Tag.objects.create(name="python") self.tag3 = Tag.objects.create(name="PYTHON") self.food_item = Food.objects.create(name="Apple") self.pet_item = HousePet.objects.create(name="Fido") self.food_item.tags.add(self.tag1) self.pet_item.tags.add(self.tag2) self.pet_item.tags.add(self.tag3) def test_deduplicate_tags(self): self.assertEqual(Tag.objects.count(), 3) self.assertEqual(TaggedItem.objects.count(), 3) out = StringIO() call_command("deduplicate_tags", stdout=out) self.assertEqual(Tag.objects.count(), 1) self.assertEqual(TaggedItem.objects.count(), 2) self.assertTrue(Tag.objects.filter(name__iexact="python").exists()) self.assertEqual( TaggedItem.objects.filter(tag__name__iexact="python").count(), 2 ) self.assertIn("Tag deduplication complete.", out.getvalue()) def test_no_duplicates(self): self.assertEqual(Tag.objects.count(), 3) self.assertEqual(TaggedItem.objects.count(), 3) out = StringIO() call_command("deduplicate_tags", stdout=out) self.assertEqual(Tag.objects.count(), 1) self.assertEqual(TaggedItem.objects.count(), 2) self.assertTrue(Tag.objects.filter(name__iexact="python").exists()) self.assertEqual( TaggedItem.objects.filter(tag__name__iexact="python").count(), 2 ) self.assertIn("Tag deduplication complete.", out.getvalue()) def test_taggit_case_insensitive_not_enabled(self): settings.TAGGIT_CASE_INSENSITIVE = False out = StringIO() call_command("deduplicate_tags", stdout=out) self.assertIn("TAGGIT_CASE_INSENSITIVE is not enabled.", out.getvalue()) self.assertEqual(Tag.objects.count(), 3) self.assertEqual(TaggedItem.objects.count(), 3) django-taggit-6.1.0/tests/test_forms.py000066400000000000000000000034611467620475500201620ustar00rootroot00000000000000from django import forms from django.test import TestCase from django.test.utils import override_settings from taggit.forms import TagField from taggit.models import Tag def _test_parse_tags(tagstring): if "," in tagstring: return tagstring.split(",") else: raise ValueError() @override_settings(TAGGIT_TAGS_FROM_STRING="tests.test_forms._test_parse_tags") class TagFieldTests(TestCase): def test_should_return_error_on_clean_if_not_comma_separated(self): class TestForm(forms.Form): tag = TagField() excpected_error = "Please provide a comma-separated list of tags." form = TestForm({"tag": "not-comma-separated"}) self.assertFalse(form.is_valid()) self.assertIn(excpected_error, form.errors["tag"]) def test_should_always_return_False_on_has_change_if_disabled(self): class TestForm(forms.Form): tag = TagField(disabled=True) form = TestForm(initial={"tag": "foo,bar"}, data={"tag": ["a,b,c"]}) self.assertTrue(form.is_valid()) self.assertFalse(form.has_changed()) def test_should_return_True_if_form_has_changed(self): class TestForm(forms.Form): tag = TagField() form = TestForm(initial={"tag": [Tag(name="a")]}, data={"tag": ["b"]}) self.assertTrue(form.has_changed()) def test_should_return_False_if_form_has_not_changed(self): class TestForm(forms.Form): tag = TagField() form = TestForm( initial={"tag": [Tag(name="foo-bar")]}, data={"tag": ["foo-bar"]} ) self.assertFalse(form.has_changed()) def test_should_return_False_if_not_provided(self): class TestForm(forms.Form): tag = TagField() form = TestForm() self.assertFalse(form.has_changed()) django-taggit-6.1.0/tests/test_models.py000066400000000000000000000051021467620475500203110ustar00rootroot00000000000000from django.test import TestCase, override_settings from tests.models import TestModel class TestTaggableManager(TestCase): def test_duplicates(self): sample_obj = TestModel.objects.create() sample_obj.tags.set(["green", "green"]) desired_result = ["green"] self.assertEqual(desired_result, [tag.name for tag in sample_obj.tags.all()]) class TestSlugification(TestCase): def test_unicode_slugs(self): """ Confirm the preservation of unicode in slugification by default """ sample_obj = TestModel.objects.create() # a unicode tag will be slugified for space reasons but # unicode-ness will be kept by default sample_obj.tags.add("ã‚ã„ ã†ãˆãŠ") self.assertEqual([tag.slug for tag in sample_obj.tags.all()], ["ã‚ã„-ã†ãˆãŠ"]) def test_old_slugs(self): """ Test that the setting that gives us the old slugification behavior is in place """ with override_settings(TAGGIT_STRIP_UNICODE_WHEN_SLUGIFYING=True): sample_obj = TestModel.objects.create() # a unicode tag will be slugified for space reasons but # unicode-ness will be kept by default sample_obj.tags.add("ã‚ã„ ã†ãˆãŠ") self.assertEqual([tag.slug for tag in sample_obj.tags.all()], [""]) class TestPrefetchCache(TestCase): def setUp(self) -> None: sample_obj = TestModel.objects.create() sample_obj.tags.set(["1", "2", "3"]) def test_cache_clears_on_add(self): """ Test that the prefetch cache gets cleared on tag addition """ sample_obj = TestModel.objects.prefetch_related("tags").get() self.assertTrue(sample_obj.tags.is_cached(sample_obj)) sample_obj.tags.add("4") self.assertFalse(sample_obj.tags.is_cached(sample_obj)) def test_cache_clears_on_remove(self): """ Test that the prefetch cache gets cleared on tag removal """ sample_obj = TestModel.objects.prefetch_related("tags").get() self.assertTrue(sample_obj.tags.is_cached(sample_obj)) sample_obj.tags.remove("3") self.assertFalse(sample_obj.tags.is_cached(sample_obj)) def test_cache_clears_on_clear(self): """ Test that the prefetch cache gets cleared when tags are cleared """ sample_obj = TestModel.objects.prefetch_related("tags").get() self.assertTrue(sample_obj.tags.is_cached(sample_obj)) sample_obj.tags.clear() self.assertFalse(sample_obj.tags.is_cached(sample_obj)) django-taggit-6.1.0/tests/test_remove_orphaned_tags.py000066400000000000000000000045651467620475500232350ustar00rootroot00000000000000from django.core.management import call_command from django.test import TestCase from taggit.models import Tag from tests.models import Food, HousePet class RemoveOrphanedTagsTests(TestCase): def setUp(self): # Create some tags, some orphaned and some not self.orphan_tag1 = Tag.objects.create(name="Orphan1") self.orphan_tag2 = Tag.objects.create(name="Orphan2") self.used_tag = Tag.objects.create(name="Used") # Create instances of Food and HousePet and tag them self.food_item = Food.objects.create(name="Apple") self.pet_item = HousePet.objects.create(name="Fido") self.food_item.tags.add(self.used_tag) self.pet_item.tags.add(self.used_tag) def test_remove_orphaned_tags(self): # Ensure the setup is correct self.assertEqual(Tag.objects.count(), 3) self.assertEqual(Tag.objects.filter(taggit_taggeditem_items=None).count(), 2) # Call the management command to remove orphaned tags call_command("remove_orphaned_tags") # Check the count of tags after running the command self.assertEqual(Tag.objects.count(), 1) self.assertEqual(Tag.objects.filter(taggit_taggeditem_items=None).count(), 0) # Ensure that the used tag still exists self.assertTrue(Tag.objects.filter(name="Used").exists()) self.assertFalse(Tag.objects.filter(name="Orphan1").exists()) self.assertFalse(Tag.objects.filter(name="Orphan2").exists()) def test_no_orphaned_tags(self): # Ensure the setup is correct self.assertEqual(Tag.objects.count(), 3) self.assertEqual(Tag.objects.filter(taggit_taggeditem_items=None).count(), 2) # Add used_tag to food_item to make no tags orphaned self.food_item.tags.add(self.orphan_tag1) self.food_item.tags.add(self.orphan_tag2) # Call the management command to remove orphaned tags call_command("remove_orphaned_tags") # Check the count of tags after running the command self.assertEqual(Tag.objects.count(), 3) self.assertEqual(Tag.objects.filter(taggit_taggeditem_items=None).count(), 0) # Ensure all tags still exist self.assertTrue(Tag.objects.filter(name="Used").exists()) self.assertTrue(Tag.objects.filter(name="Orphan1").exists()) self.assertTrue(Tag.objects.filter(name="Orphan2").exists()) django-taggit-6.1.0/tests/test_serializers.py000066400000000000000000000064321467620475500213710ustar00rootroot00000000000000""" test_django-taggit-serializer ------------ Tests for `django-taggit-serializer` models module. """ from django.test import TestCase from rest_framework.exceptions import ValidationError from taggit import serializers from .models import TestModel from .serializers import TestModelSerializer class TestTaggit_serializer(TestCase): def test_taggit_serializer_field(self): correct_value = ["1", "2", "3"] serializer_field = serializers.TagListSerializerField() correct_value = serializer_field.to_internal_value(correct_value) assert type(correct_value) is list incorrect_value = "123" with self.assertRaises(ValidationError): incorrect_value = serializer_field.to_internal_value(incorrect_value) representation = serializer_field.to_representation(correct_value) self.assertIsInstance(representation, serializers.TagList) def test_taggit_serializer_update(self): """Test if serializer class is working properly on updating object""" request_data = {"tags": ["1", "2", "3"]} test_model = TestModel.objects.create() serializer = TestModelSerializer(test_model, data=request_data) serializer.is_valid() serializer.save() assert len(test_model.tags.all()) == len(request_data.get("tags")) def test_taggit_serializer_create(self): """ Test if serializer class is working properly on creating a object """ request_data = {"tags": ["1", "2", "3"]} serializer = TestModelSerializer(data=request_data) assert serializer.is_valid() test_model = serializer.save() assert len(test_model.tags.all()) == len(request_data.get("tags")) def test_taggit_serializer_create_with_string(self): """ Test that we can pass in a string instead of an array for a tag list without issues """ request_data = {"tags": '["1", "2", "3"]'} serializer = TestModelSerializer(data=request_data) assert serializer.is_valid(), serializer.errors test_model = serializer.save() assert {tag.name for tag in test_model.tags.all()} == {"1", "2", "3"} def test_taggit_removes_tags(self): """ Test if the old assigned tags are removed """ test_model = TestModel.objects.create() test_model.tags.add("1") request_data = {"tags": ["2", "3"]} serializer = TestModelSerializer(test_model, data=request_data) serializer.is_valid() test_model = serializer.save() assert TestModel.objects.filter(tags__name__in=["1"]).count() == 0 assert TestModel.objects.filter(tags__name__in=["1", "2"]).count() == 1 def test_returns_new_data_after_update(self): """ Test if the serializer uses fresh data after updating prefetched fields """ TestModel.objects.create().tags.add("1") test_model = TestModel.objects.prefetch_related("tags").get() assert TestModelSerializer(test_model).data["tags"] == ["1"] request_data = {"tags": ["2", "3"]} serializer = TestModelSerializer(test_model, data=request_data) serializer.is_valid() test_model = serializer.save() assert set(serializer.data["tags"]) == {"2", "3"} django-taggit-6.1.0/tests/test_utils.py000066400000000000000000000017201467620475500201700ustar00rootroot00000000000000import os import os.path from django.test import TestCase from django.utils import translation from taggit.utils import split_strip class SplitStripTests(TestCase): def test_should_return_empty_list_if_not_string(self): result = split_strip(None) self.assertListEqual(result, []) def test_should_return_list_of_non_empty_words(self): expected_result = ["foo", "bar"] result = split_strip("foo|bar||", delimiter="|") self.assertListEqual(result, expected_result) class TestLanguages(TestCase): maxDiff = None def get_locale_dir(self): return os.path.join(os.path.dirname(__file__), "..", "taggit", "locale") def test_language_file_integrity(self): locale_dir = self.get_locale_dir() for locale in os.listdir(locale_dir): # attempt translation activation to confirm that the language files are working with translation.override(locale): pass django-taggit-6.1.0/tests/tests.py000066400000000000000000001576551467620475500171560ustar00rootroot00000000000000import os from io import StringIO from unittest import mock from django import VERSION as DJANGO_VERSION from django.contrib.contenttypes.models import ContentType from django.core import serializers from django.core.exceptions import ValidationError from django.core.management import call_command from django.db import IntegrityError, connection, models from django.test import RequestFactory, SimpleTestCase, TestCase from django.test.utils import override_settings from taggit.managers import TaggableManager, _TaggableManager from taggit.models import Tag, TaggedItem from taggit.utils import edit_string_for_tags, parse_tags from taggit.views import tagged_object_list from .forms import ( BlankTagForm, CustomPKFoodForm, DirectCustomPKFoodForm, DirectFoodForm, FoodForm, OfficialFoodForm, ) from .models import ( Article, Child, CustomManager, CustomPKFood, CustomPKHousePet, CustomPKPet, DirectCustomPKFood, DirectCustomPKHousePet, DirectCustomPKPet, DirectFood, DirectHousePet, DirectPet, DirectTrackedFood, DirectTrackedHousePet, DirectTrackedPet, Food, HousePet, Movie, MultiInheritanceFood, Name, OfficialFood, OfficialHousePet, OfficialPet, OfficialTag, OfficialThroughModel, OrderedModel, Pet, Photo, ProxyPhoto, TaggedCustomPK, TaggedCustomPKFood, TaggedFood, TaggedTrackedFood, TenantModel, TenantTag, TestModel, TrackedTag, UUIDFood, UUIDHousePet, UUIDPet, UUIDTag, UUIDTaggedItem, ) if DJANGO_VERSION < (4, 2): TestCase.assertQuerySetEqual = TestCase.assertQuerysetEqual class BaseTaggingTestCase(TestCase): def assert_tags_equal(self, qs, tags, sort=True, attr="name"): got = [getattr(obj, attr) for obj in qs] if sort: got.sort() tags.sort() self.assertEqual(got, tags) class TagModelTestCase(BaseTaggingTestCase): food_model = Food tag_model = Tag def test_unique_slug(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("Red", "red") def test_update(self): special = self.tag_model.objects.create(name="special") special.save() def test_add(self): apple = self.food_model.objects.create(name="apple") yummy = self.tag_model.objects.create(name="yummy") apple.tags.add(yummy) def test_slugify(self): a = Article.objects.create(title="django-taggit 1.0 Released") a.tags.add("awesome", "release", "AWESOME") self.assert_tags_equal( a.tags.all(), ["category-awesome", "category-release", "category-awesome-1"], attr="slug", ) def test_integers(self): """Adding an integer as a tag should raise a ValueError (#237).""" apple = self.food_model.objects.create(name="apple") with self.assertRaisesRegex( ValueError, ( r"Cannot add 1 \(<(type|class) 'int'>\). " r"Expected or str." ), ): apple.tags.add(1) def test_gt(self): high = self.tag_model.objects.create(name="high") low = self.tag_model.objects.create(name="Low") self.assertIs(low > high, True) self.assertIs(high > low, False) def test_lt(self): high = self.tag_model.objects.create(name="high") low = self.tag_model.objects.create(name="Low") self.assertIs(high < low, True) self.assertIs(low < high, False) class CustomTagCreationTestCase(TestCase): def test_model_manager_add(self): apple = OfficialFood.objects.create(name="apple") # let's add two official tags apple.tags.add("foo", "bar", tag_kwargs={"official": True}) # and two unofficial ones apple.tags.add("baz", "wow", tag_kwargs={"official": False}) # We should end up with 4 tags self.assertEqual(apple.tags.count(), 4) self.assertEqual(apple.tags.filter(official=True).count(), 2) self.assertEqual(apple.tags.filter(official=False).count(), 2) class TagModelDirectTestCase(TagModelTestCase): food_model = DirectFood tag_model = Tag class TagModelDirectCustomPKTestCase(TagModelTestCase): food_model = DirectCustomPKFood tag_model = Tag class TagModelCustomPKTestCase(TagModelTestCase): food_model = CustomPKFood tag_model = Tag class TagModelOfficialTestCase(TagModelTestCase): food_model = OfficialFood tag_model = OfficialTag class TagUUIDModelTestCase(TagModelTestCase): food_model = UUIDFood tag_model = UUIDTag class TaggableManagerTestCase(BaseTaggingTestCase): food_model = Food multi_inheritance_food_model = MultiInheritanceFood pet_model = Pet housepet_model = HousePet taggeditem_model = TaggedItem tag_model = Tag def setUp(self): super().setUp() ContentType.objects.clear_cache() def test_add_tag(self): apple = self.food_model.objects.create(name="apple") self.assertEqual(list(apple.tags.all()), []) self.assertEqual(list(self.food_model.tags.all()), []) apple.tags.add("green") self.assert_tags_equal(apple.tags.all(), ["green"]) self.assert_tags_equal(self.food_model.tags.all(), ["green"]) pear = self.food_model.objects.create(name="pear") pear.tags.add("green") self.assert_tags_equal(pear.tags.all(), ["green"]) self.assert_tags_equal(self.food_model.tags.all(), ["green"]) apple.tags.add("red") self.assert_tags_equal(apple.tags.all(), ["green", "red"]) self.assert_tags_equal(self.food_model.tags.all(), ["green", "red"]) self.assert_tags_equal( self.food_model.tags.most_common(), ["green", "red"], sort=False ) self.assert_tags_equal( self.food_model.tags.most_common(min_count=2), ["green"], sort=False ) apple.tags.remove("green") self.assert_tags_equal(apple.tags.all(), ["red"]) self.assert_tags_equal(self.food_model.tags.all(), ["green", "red"]) tag = self.tag_model.objects.create(name="delicious") apple.tags.add(tag) self.assert_tags_equal(apple.tags.all(), ["red", "delicious"]) apple.delete() self.assert_tags_equal(self.food_model.tags.all(), ["green"]) @mock.patch("django.db.models.signals.m2m_changed.send") def test_add_new_tag_sends_m2m_changed_signals(self, send_mock): apple = self.food_model.objects.create(name="apple") apple.tags.add("green") green_pk = self.tag_model.objects.get(name="green").pk self.assertEqual(send_mock.call_count, 2) send_mock.assert_has_calls( [ mock.call( action="pre_add", instance=apple, model=self.tag_model, pk_set={green_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_add", instance=apple, model=self.tag_model, pk_set={green_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), ] ) @mock.patch("django.db.models.signals.m2m_changed.send") def test_add_existing_tag_sends_m2m_changed_signals(self, send_mock): apple = self.food_model.objects.create(name="apple") green = self.tag_model.objects.create(name="green") apple.tags.add("green") self.assertEqual(send_mock.call_count, 2) send_mock.assert_has_calls( [ mock.call( action="pre_add", instance=apple, model=self.tag_model, pk_set={green.pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_add", instance=apple, model=self.tag_model, pk_set={green.pk}, reverse=False, sender=self.taggeditem_model, using="default", ), ] ) @mock.patch("django.db.models.signals.m2m_changed.send") def test_add_second_tag_sends_m2m_changed_signals_with_correct_new_pks( self, send_mock ): apple = self.food_model.objects.create(name="apple") green = self.tag_model.objects.create(name="green") apple.tags.add("red") send_mock.reset_mock() apple.tags.add("green", "red") self.assertEqual(send_mock.call_count, 2) send_mock.assert_has_calls( [ mock.call( action="pre_add", instance=apple, model=self.tag_model, pk_set={green.pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_add", instance=apple, model=self.tag_model, pk_set={green.pk}, reverse=False, sender=self.taggeditem_model, using="default", ), ] ) @mock.patch("django.db.models.signals.m2m_changed.send") def test_remove_tag_sends_m2m_changed_signals(self, send_mock): apple = self.food_model.objects.create(name="apple") apple.tags.add("green") green_pk = self.tag_model.objects.get(name="green").pk send_mock.reset_mock() apple.tags.remove("green") self.assertEqual(send_mock.call_count, 2) send_mock.assert_has_calls( [ mock.call( action="pre_remove", instance=apple, model=self.tag_model, pk_set={green_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_remove", instance=apple, model=self.tag_model, pk_set={green_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), ] ) @mock.patch("django.db.models.signals.m2m_changed.send") def test_clear_sends_m2m_changed_signal(self, send_mock): apple = self.food_model.objects.create(name="apple") apple.tags.add("red") send_mock.reset_mock() apple.tags.clear() self.assertEqual(send_mock.call_count, 2) send_mock.assert_has_calls( [ mock.call( action="pre_clear", instance=apple, model=self.tag_model, pk_set=None, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_clear", instance=apple, model=self.tag_model, pk_set=None, reverse=False, sender=self.taggeditem_model, using="default", ), ] ) @mock.patch("django.db.models.signals.m2m_changed.send") def test_set_with_clear_true_sends_m2m_changed_signal(self, send_mock): apple = self.food_model.objects.create(name="apple") apple.tags.add("green") apple.tags.add("red") send_mock.reset_mock() apple.tags.set(["red"], clear=True) red_pk = self.tag_model.objects.get(name="red").pk self.assertEqual(send_mock.call_count, 4) send_mock.assert_has_calls( [ mock.call( action="pre_clear", instance=apple, model=self.tag_model, pk_set=None, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_clear", instance=apple, model=self.tag_model, pk_set=None, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="pre_add", instance=apple, model=self.tag_model, pk_set={red_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_add", instance=apple, model=self.tag_model, pk_set={red_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), ] ) @mock.patch("django.db.models.signals.m2m_changed.send") def test_set_sends_m2m_changed_signal(self, send_mock): apple = self.food_model.objects.create(name="apple") apple.tags.add("green") send_mock.reset_mock() apple.tags.set(["red"]) green_pk = self.tag_model.objects.get(name="green").pk red_pk = self.tag_model.objects.get(name="red").pk self.assertEqual(send_mock.call_count, 4) send_mock.assert_has_calls( [ mock.call( action="pre_remove", instance=apple, model=self.tag_model, pk_set={green_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_remove", instance=apple, model=self.tag_model, pk_set={green_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="pre_add", instance=apple, model=self.tag_model, pk_set={red_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), mock.call( action="post_add", instance=apple, model=self.tag_model, pk_set={red_pk}, reverse=False, sender=self.taggeditem_model, using="default", ), ] ) def test_add_queries(self): # Prefill content type cache: ContentType.objects.get_for_model(self.food_model) apple = self.food_model.objects.create(name="apple") # 1. SELECT "taggit_tag"."id", "taggit_tag"."name", "taggit_tag"."slug" FROM "taggit_tag" WHERE "taggit_tag"."name" IN ('green', 'red', 'delicious') # 2. SELECT "taggit_tag"."id", "taggit_tag"."name", "taggit_tag"."slug" FROM "taggit_tag" WHERE "taggit_tag"."name" = 'green' # 3. SAVEPOINT # 4. SAVEPOINT # 5. INSERT INTO "taggit_tag" ("name", "slug") VALUES ('green', 'green') # 6. RELEASE SAVEPOINT # 7. RELEASE SAVEPOINT # 8. SELECT "taggit_tag"."id", "taggit_tag"."name", "taggit_tag"."slug" FROM "taggit_tag" WHERE "taggit_tag"."name" = 'red' # 9. SAVEPOINT # 10. SAVEPOINT # 11. INSERT INTO "taggit_tag" ("name", "slug") VALUES ('red', 'red') # 12. RELEASE SAVEPOINT # 13. RELEASE SAVEPOINT # 14. SELECT "taggit_tag"."id", "taggit_tag"."name", "taggit_tag"."slug" FROM "taggit_tag" WHERE "taggit_tag"."name" = 'delicious' # 15. SAVEPOINT # 16. SAVEPOINT # 17. INSERT INTO "taggit_tag" ("name", "slug") VALUES ('delicious', 'delicious') # 18. RELEASE SAVEPOINT # 19. RELEASE SAVEPOINT # 20. SELECT "taggit_taggeditem"."tag_id" FROM "taggit_taggeditem" WHERE ("taggit_taggeditem"."content_type_id" = 20 AND "taggit_taggeditem"."object_id" = 1) # 21. SELECT "taggit_taggeditem"."id", "taggit_taggeditem"."tag_id", "taggit_taggeditem"."content_type_id", "taggit_taggeditem"."object_id" FROM "taggit_taggeditem" WHERE ("taggit_taggeditem"."content_type_id" = 20 AND "taggit_taggeditem"."object_id" = 1 AND "taggit_taggeditem"."tag_id" = 1) # 22. SAVEPOINT # 23. INSERT INTO "taggit_taggeditem" ("tag_id", "content_type_id", "object_id") VALUES (1, 20, 1) # 24. RELEASE SAVEPOINT # 25. SELECT "taggit_taggeditem"."id", "taggit_taggeditem"."tag_id", "taggit_taggeditem"."content_type_id", "taggit_taggeditem"."object_id" FROM "taggit_taggeditem" WHERE ("taggit_taggeditem"."content_type_id" = 20 AND "taggit_taggeditem"."object_id" = 1 AND "taggit_taggeditem"."tag_id" = 2) # 26. SAVEPOINT # 27. INSERT INTO "taggit_taggeditem" ("tag_id", "content_type_id", "object_id") VALUES (2, 20, 1) # 28. RELEASE SAVEPOINT # 29. SELECT "taggit_taggeditem"."id", "taggit_taggeditem"."tag_id", "taggit_taggeditem"."content_type_id", "taggit_taggeditem"."object_id" FROM "taggit_taggeditem" WHERE ("taggit_taggeditem"."content_type_id" = 20 AND "taggit_taggeditem"."object_id" = 1 AND "taggit_taggeditem"."tag_id" = 3) # 30. SAVEPOINT # 31. INSERT INTO "taggit_taggeditem" ("tag_id", "content_type_id", "object_id") VALUES (3, 20, 1) # 32. RELEASE SAVEPOINT queries = 32 self.assertNumQueries(queries, apple.tags.add, "red", "delicious", "green") pear = self.food_model.objects.create(name="pear") # 1 query to see which tags exist # 1 query to check existing ids for sending m2m_changed signal # + 4 queries to create the intermediary things (including SELECTs, to # make sure we dont't double create. # + 4 for save points. queries = 10 self.assertNumQueries(queries, pear.tags.add, "green", "delicious") # 1 query to check existing ids for sending m2m_changed signal self.assertNumQueries(1, pear.tags.add) def test_require_pk(self): food_instance = self.food_model() msg = ( "%s objects need to have a primary key value before you can access " "their tags." % type(self.food_model()).__name__ ) with self.assertRaisesMessage(ValueError, msg): food_instance.tags.all() def test_delete_obj(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("red") self.assert_tags_equal(apple.tags.all(), ["red"]) strawberry = self.food_model.objects.create(name="strawberry") strawberry.tags.add("red") apple.delete() self.assert_tags_equal(strawberry.tags.all(), ["red"]) def test_delete_bulk(self): apple = self.food_model.objects.create(name="apple") kitty = self.pet_model.objects.create(pk=apple.pk, name="kitty") apple.tags.add("red", "delicious", "fruit") kitty.tags.add("feline") self.food_model.objects.all().delete() self.assert_tags_equal(kitty.tags.all(), ["feline"]) def test_lookup_by_tag(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("red", "green") pear = self.food_model.objects.create(name="pear") pear.tags.add("green") self.assertEqual( list(self.food_model.objects.filter(tags__name__in=["red"])), [apple] ) self.assertEqual( list(self.food_model.objects.filter(tags__name__in=["green"])), [apple, pear], ) kitty = self.pet_model.objects.create(name="kitty") kitty.tags.add("fuzzy", "red") dog = self.pet_model.objects.create(name="dog") dog.tags.add("woof", "red") self.assertEqual( list(self.food_model.objects.filter(tags__name__in=["red"]).distinct()), [apple], ) tag = self.tag_model.objects.get(name="woof") self.assertEqual(list(self.pet_model.objects.filter(tags__in=[tag])), [dog]) cat = self.housepet_model.objects.create(name="cat", trained=True) cat.tags.add("fuzzy") pks = self.pet_model.objects.filter(tags__name__in=["fuzzy"]) model_name = self.pet_model.__name__ self.assertQuerySetEqual( pks, [f"<{model_name}: kitty>", f"<{model_name}: cat>"], ordered=False, transform=repr, ) def test_exclude(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("red", "green", "delicious") pear = self.food_model.objects.create(name="pear") pear.tags.add("green", "delicious") self.food_model.objects.create(name="guava") pks = self.food_model.objects.exclude(tags__name__in=["red"]) model_name = self.food_model.__name__ self.assertQuerySetEqual( pks, [f"<{model_name}: pear>", f"<{model_name}: guava>"], ordered=False, transform=repr, ) def test_multi_inheritance_similarity_by_tag(self): """Test that pears are more similar to apples than watermelons using multi_inheritance""" apple = self.multi_inheritance_food_model.objects.create(name="apple") apple.tags.add("green", "juicy", "small", "sour") pear = self.multi_inheritance_food_model.objects.create(name="pear") pear.tags.add("green", "juicy", "small", "sweet") watermelon = self.multi_inheritance_food_model.objects.create(name="watermelon") watermelon.tags.add("green", "juicy", "large", "sweet") similar_objs = apple.tags.similar_objects() self.assertEqual(similar_objs, [pear, watermelon]) self.assertEqual([obj.similar_tags for obj in similar_objs], [3, 2]) def test_similarity_by_tag(self): """Test that pears are more similar to apples than watermelons""" apple = self.food_model.objects.create(name="apple") apple.tags.add("green", "juicy", "small", "sour") pear = self.food_model.objects.create(name="pear") pear.tags.add("green", "juicy", "small", "sweet") watermelon = self.food_model.objects.create(name="watermelon") watermelon.tags.add("green", "juicy", "large", "sweet") similar_objs = apple.tags.similar_objects() self.assertEqual(similar_objs, [pear, watermelon]) self.assertEqual([obj.similar_tags for obj in similar_objs], [3, 2]) def test_tag_reuse(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("juicy", "juicy") self.assert_tags_equal(apple.tags.all(), ["juicy"]) def test_query_traverse(self): spot = self.pet_model.objects.create(name="Spot") spike = self.pet_model.objects.create(name="Spike") spot.tags.add("scary") spike.tags.add("fluffy") lookup_kwargs = {"%s__name" % self.pet_model._meta.model_name: "Spot"} self.assert_tags_equal( self.tag_model.objects.filter(**lookup_kwargs), ["scary"] ) def test_taggeditem_str(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("juicy") self.assertEqual( str(self.taggeditem_model.objects.first()), "apple tagged with juicy" ) def test_taggeditem_through_defaults(self): if self.taggeditem_model != OfficialThroughModel: self.skipTest( "Through default tests are only run when the tagged item model has extra_field" ) apple = self.food_model.objects.create(name="kiwi") apple.tags.add("juicy", through_defaults={"extra_field": "green"}) self.assertEqual( str(self.taggeditem_model.objects.first()), "kiwi tagged with juicy" ) self.assertEqual(self.taggeditem_model.objects.first().extra_field, "green") def test_abstract_subclasses(self): p = Photo.objects.create() p.tags.add("outdoors", "pretty") self.assert_tags_equal(p.tags.all(), ["outdoors", "pretty"]) m = Movie.objects.create() m.tags.add("hd") self.assert_tags_equal(m.tags.all(), ["hd"]) def test_proxy_subclasses(self): p = Photo.objects.create() proxy_p = ProxyPhoto.objects.create() p.tags.add("outdoors", "pretty") self.assert_tags_equal(p.tags.all(), ["outdoors", "pretty"]) self.assert_tags_equal(proxy_p.tags.all(), []) proxy_p.tags.add("hd") self.assert_tags_equal(proxy_p.tags.all(), ["hd"]) self.assert_tags_equal(p.tags.all(), ["outdoors", "pretty"]) def test_field_api(self): # Check if tag field, which simulates m2m, has django-like api. field = self.food_model._meta.get_field("tags") self.assertTrue(hasattr(field, "remote_field")) self.assertTrue(hasattr(field.remote_field, "model")) self.assertEqual(self.food_model, field.model) self.assertEqual(self.tag_model, field.remote_field.model) def test_names_method(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("green") apple.tags.add("red") self.assertEqual(sorted(list(apple.tags.names())), ["green", "red"]) def test_slugs_method(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("green and juicy") apple.tags.add("red") self.assertEqual(sorted(list(apple.tags.slugs())), ["green-and-juicy", "red"]) def test_serializes(self): apple = self.food_model.objects.create(name="apple") serializers.serialize("json", (apple,)) def test_prefetch_related(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("1", "2") orange = self.food_model.objects.create(name="orange") orange.tags.add("2", "4") with self.assertNumQueries(2): list_prefetched = list( self.food_model.objects.prefetch_related("tags").all() ) with self.assertNumQueries(0): foods = {f.name: {t.name for t in f.tags.all()} for f in list_prefetched} self.assertEqual(foods, {"orange": {"2", "4"}, "apple": {"1", "2"}}) def test_internal_type_is_manytomany(self): self.assertEqual(TaggableManager().get_internal_type(), "ManyToManyField") def test_prefetch_no_extra_join(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("1", "2") with self.assertNumQueries(2): list(self.food_model.objects.prefetch_related("tags").all()) join_clause = 'INNER JOIN "%s"' % self.taggeditem_model._meta.db_table self.assertEqual( connection.queries[-1]["sql"].count(join_clause), 1, connection.queries[-2:], ) @override_settings(TAGGIT_CASE_INSENSITIVE=True) def test_with_case_insensitive_option(self): spain = self.tag_model.objects.create(name="Spain", slug="spain") orange = self.food_model.objects.create(name="orange") orange.tags.add("spain") self.assertEqual(list(orange.tags.all()), [spain]) @override_settings(TAGGIT_CASE_INSENSITIVE=True) def test_with_case_insensitive_option_and_creation(self): orange = self.food_model.objects.create(name="orange") orange.tags.add("spain", "Spain") tag_names = list(orange.tags.names()) self.assertEqual(len(tag_names), 1, tag_names) @override_settings(TAGGIT_CASE_INSENSITIVE=True) def test_with_case_insensitive_option_new_and_old(self): orange = self.food_model.objects.create(name="orange") orange.tags.add("Spain") tag_names = list(orange.tags.names()) self.assertEqual(len(tag_names), 1, tag_names) orange.tags.add("spain", "Valencia") tag_names = sorted(orange.tags.names()) self.assertEqual(tag_names, ["Spain", "Valencia"]) def test_tag_uniqueness(self): apple = self.food_model.objects.create(name="apple") tag = self.tag_model.objects.create(name="juice", slug="juicy") self.taggeditem_model.objects.create(tag=tag, content_object=apple) with self.assertRaises(IntegrityError): self.taggeditem_model.objects.create(tag=tag, content_object=apple) def test_most_common_lazy(self): with self.assertNumQueries(0): qs = self.food_model.tags.most_common() with self.assertNumQueries(1): list(qs) class TaggableManagerDirectTestCase(TaggableManagerTestCase): food_model = DirectFood pet_model = DirectPet housepet_model = DirectHousePet taggeditem_model = TaggedFood class TaggableManagerDirectTrackedTestCase(TaggableManagerTestCase): food_model = DirectTrackedFood pet_model = DirectTrackedPet housepet_model = DirectTrackedHousePet taggeditem_model = TaggedTrackedFood tag_model = TrackedTag class TaggableManagerDirectCustomPKTestCase(TaggableManagerTestCase): food_model = DirectCustomPKFood pet_model = DirectCustomPKPet housepet_model = DirectCustomPKHousePet taggeditem_model = TaggedCustomPKFood def test_require_pk(self): # With a CharField pk, pk is never None. So taggit has no way to tell # if the instance is saved or not. pass class TaggableManagerCustomPKTestCase(TaggableManagerTestCase): food_model = CustomPKFood pet_model = CustomPKPet housepet_model = CustomPKHousePet taggeditem_model = TaggedCustomPK def test_require_pk(self): # With a CharField pk, pk is never None. So taggit has no way to tell # if the instance is saved or not. pass class TaggableManagerUUIDTestCase(TaggableManagerTestCase): food_model = UUIDFood pet_model = UUIDPet housepet_model = UUIDHousePet taggeditem_model = UUIDTaggedItem tag_model = UUIDTag def test_require_pk(self): # With a UUIDField pk, pk is never None. So taggit has no way to tell # if the instance is saved or not. pass class TenantTagTestCase(TestCase): model = TenantModel tag_model = TenantTag def test_tenant_tag(self): tenant_1 = self.model.objects.create(name="tenant 1") tenant_2 = self.model.objects.create(name="tenant 2") # tenant 1 tags tenant_1.tags.add("foo", "bar", tag_kwargs={"tenant_id": 1}) # tenant 2 tags tenant_2.tags.add("foo", "baz", tag_kwargs={"tenant_id": 2}) # We should end up with 4 tags self.assertEqual(self.tag_model.objects.all().count(), 4) self.assertEqual(tenant_1.tags.count(), 2) self.assertEqual(tenant_2.tags.count(), 2) @override_settings(TAGGIT_CASE_INSENSITIVE=True) def test_tenant_tag_insensitive(self): tenant_1 = self.model.objects.create(name="tenant 1") tenant_2 = self.model.objects.create(name="tenant 2") # tenant 1 tags tenant_1.tags.add("foo", "bar", tag_kwargs={"tenant_id": 1}) # tenant 2 tags tenant_2.tags.add("foo", "baz", tag_kwargs={"tenant_id": 2}) # We should end up with 4 tags self.assertEqual(self.tag_model.objects.all().count(), 4) self.assertEqual(tenant_1.tags.count(), 2) self.assertEqual(tenant_2.tags.count(), 2) class TaggableManagerOfficialTestCase(TaggableManagerTestCase): food_model = OfficialFood pet_model = OfficialPet housepet_model = OfficialHousePet taggeditem_model = OfficialThroughModel tag_model = OfficialTag def test_extra_fields(self): self.tag_model.objects.create(name="red") self.tag_model.objects.create(name="delicious", official=True) apple = self.food_model.objects.create(name="apple") apple.tags.add("delicious", "red") pear = self.food_model.objects.create(name="Pear") pear.tags.add("delicious") self.assertEqual(apple, self.food_model.objects.get(tags__official=False)) def test_get_tags_with_count(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("red", "green", "delicious") pear = self.food_model.objects.create(name="pear") pear.tags.add("green", "delicious") tag_info = self.tag_model.objects.filter( officialfood__in=[apple.id, pear.id], name="green" ).annotate(models.Count("name")) self.assertEqual(tag_info[0].name__count, 2) def test_most_common_extra_filters(self): apple = self.food_model.objects.create(name="apple") apple.tags.add("red") apple.tags.add("green") orange = self.food_model.objects.create(name="orange") orange.tags.add("orange") orange.tags.add("red") pear = self.food_model.objects.create(name="pear") pear.tags.add("green") pear.tags.add("yellow") self.assert_tags_equal( self.food_model.tags.most_common( min_count=2, extra_filters={"officialfood__name__in": ["pear", "apple"]} )[:1], ["green"], sort=False, ) self.assert_tags_equal( self.food_model.tags.most_common( min_count=2, extra_filters={"officialfood__name__in": ["orange", "apple"]}, )[:1], ["red"], sort=False, ) class TaggableManagerInitializationTestCase(TaggableManagerTestCase): """Make sure manager override defaults and sets correctly.""" food_model = Food custom_manager_model = CustomManager def test_default_manager(self): self.assertIs(type(self.food_model.tags), _TaggableManager) def test_custom_manager(self): self.assertIs(type(self.custom_manager_model.tags), CustomManager.Foo) class TaggableFormTestCase(BaseTaggingTestCase): form_class = FoodForm food_model = Food def _get_form_str(self, form_str): if DJANGO_VERSION >= (5, 0): # Django defaults to div-based form rendering in 5.0 # https://github.com/django/django/commit/98756c685ee173bbd43f21ed0553f808be835ce5 # https://github.com/django/django/commit/232b60a21b951bd16b8c95b34fcbcbf3ecd89fca form_str %= { "help_start": '
', "help_stop": "
", "required": "required", "aria": 'aria-describedby="id_tags_helptext"', } else: form_str %= { "help_start": '', "help_stop": "", "required": "required", "aria": "", } return form_str def assertFormRenders(self, form, html): rendered_form = form.as_table() if DJANGO_VERSION < (5, 0) else form.as_div() self.assertHTMLEqual(rendered_form, self._get_form_str(html)) def test_form(self): self.assertEqual(list(self.form_class.base_fields), ["name", "tags"]) f = self.form_class({"name": "apple", "tags": "green, red, yummy"}) if DJANGO_VERSION >= (5, 0): self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s
""", ) else: self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s""", ) f.save() apple = self.food_model.objects.get(name="apple") self.assert_tags_equal(apple.tags.all(), ["green", "red", "yummy"]) f = self.form_class( {"name": "apple", "tags": "green, red, yummy, delicious"}, instance=apple ) f.save() apple = self.food_model.objects.get(name="apple") self.assert_tags_equal(apple.tags.all(), ["green", "red", "yummy", "delicious"]) self.assertEqual(self.food_model.objects.count(), 1) f = self.form_class({"name": "raspberry"}) self.assertFalse(f.is_valid()) f = self.form_class(instance=apple) if DJANGO_VERSION >= (5, 0): self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s
""", ) else: self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s""", ) apple.tags.add("has,comma") f = self.form_class(instance=apple) if DJANGO_VERSION >= (5, 0): self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s
""", ) else: self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s""", ) apple.tags.add("has space") f = self.form_class(instance=apple) if DJANGO_VERSION >= (5, 0): self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s
""", ) else: self.assertFormRenders( f, """
%(help_start)sA comma-separated list of tags.%(help_stop)s""", ) def test_formfield(self): tm = TaggableManager( verbose_name="categories", help_text="Add some categories", blank=True ) ff = tm.formfield() self.assertEqual(ff.label, "Categories") self.assertEqual(ff.help_text, "Add some categories") self.assertEqual(ff.required, False) self.assertEqual(ff.clean(""), []) tm = TaggableManager() ff = tm.formfield() self.assertRaises(ValidationError, ff.clean, "") def test_form_changed_data(self): # new food, blank tag pear = self.food_model() request = {"name": "pear", "tags": ""} fff = self.form_class(request, instance=pear) self.assertFalse(fff.is_valid()) pear = self.food_model() request = {"name": "pear", "tags": "sweat"} fff = self.form_class(request, instance=pear) self.assertTrue(fff.is_valid()) self.assertIn("tags", fff.changed_data) self.assertIn("name", fff.changed_data) fff.save() request = {"name": "pear", "tags": "yellow"} fff = self.form_class(request, instance=pear) self.assertTrue(fff.is_valid()) self.assertIn("tags", fff.changed_data) self.assertNotIn("name", fff.changed_data) fff.save() # same object nothing changed fff = self.form_class(request, instance=pear) self.assertTrue(fff.is_valid()) self.assertFalse(fff.changed_data) # delete tag request = {"name": "pear", "tags": ""} fff = self.form_class(request, instance=pear) self.assertFalse(fff.is_valid()) # tag not blank # change name, tags are the same request = {"name": "apple", "tags": "yellow"} fff = self.form_class(request, instance=pear) self.assertTrue(fff.is_valid()) self.assertIn("name", fff.changed_data) self.assertNotIn("tags", fff.changed_data) fff.save() # tags changed apple = self.food_model.objects.get(name="apple") request = {"name": "apple", "tags": "yellow, delicious"} fff = self.form_class(request, instance=apple) self.assertTrue(fff.is_valid()) self.assertNotIn("name", fff.changed_data) self.assertIn("tags", fff.changed_data) fff.save() # only tags order changed apple = self.food_model.objects.get(name="apple") request = {"name": "apple", "tags": "delicious, yellow"} fff = self.form_class(request, instance=apple) self.assertTrue(fff.is_valid()) self.assertFalse(fff.changed_data) # and nothing changed fff = self.form_class(request, instance=apple) self.assertTrue(fff.is_valid()) self.assertFalse(fff.changed_data) class TaggableFormDirectTestCase(TaggableFormTestCase): form_class = DirectFoodForm food_model = DirectFood class TaggableFormDirectCustomPKTestCase(TaggableFormTestCase): form_class = DirectCustomPKFoodForm food_model = DirectCustomPKFood class TaggableFormCustomPKTestCase(TaggableFormTestCase): form_class = CustomPKFoodForm food_model = CustomPKFood class TaggableFormOfficialTestCase(TaggableFormTestCase): form_class = OfficialFoodForm food_model = OfficialFood class BlankFormTestCase(SimpleTestCase): form_class = BlankTagForm def test_early_access_to_changed_data_with(self): # For example in ModelForm.validate_unique(). request = {"name": "pear"} form = self.form_class(request) self.assertNotIn("tags", form.changed_data) request = {"name": "pear", "tags": ""} form = self.form_class(request) self.assertNotIn("tags", form.changed_data) request = {"name": "pear", "tags": "tag1"} form = self.form_class(request) self.assertIn("tags", form.changed_data) class TagStringParseTestCase(SimpleTestCase): """ Ported from Jonathan Buchanan's `django-tagging `_ """ def test_with_simple_space_delimited_tags(self): """ Test with simple space-delimited tags. """ self.assertEqual(parse_tags("one"), ["one"]) self.assertEqual(parse_tags("one two"), ["one", "two"]) self.assertEqual(parse_tags("one two three"), ["one", "three", "two"]) self.assertEqual(parse_tags("one one two two"), ["one", "two"]) def test_with_comma_delimited_multiple_words(self): """ Test with comma-delimited multiple words. An unquoted comma in the input will trigger this. """ self.assertEqual(parse_tags(",one"), ["one"]) self.assertEqual(parse_tags(",one two"), ["one two"]) self.assertEqual(parse_tags(",one two three"), ["one two three"]) self.assertEqual( parse_tags("a-one, a-two and a-three"), ["a-one", "a-two and a-three"] ) def test_with_double_quoted_multiple_words(self): """ Test with double-quoted multiple words. A completed quote will trigger this. Unclosed quotes are ignored. """ self.assertEqual(parse_tags('"one'), ["one"]) self.assertEqual(parse_tags('"one two'), ["one", "two"]) self.assertEqual(parse_tags('"one two three'), ["one", "three", "two"]) self.assertEqual(parse_tags('"one two"'), ["one two"]) self.assertEqual( parse_tags('a-one "a-two and a-three"'), ["a-one", "a-two and a-three"] ) def test_with_no_loose_commas(self): """ Test with no loose commas -- split on spaces. """ self.assertEqual(parse_tags('one two "thr,ee"'), ["one", "thr,ee", "two"]) def test_with_loose_commas(self): """ Loose commas - split on commas """ self.assertEqual(parse_tags('"one", two three'), ["one", "two three"]) def test_tags_with_double_quotes_can_contain_commas(self): """ Double quotes can contain commas """ self.assertEqual( parse_tags('a-one "a-two, and a-three"'), ["a-one", "a-two, and a-three"] ) self.assertEqual(parse_tags('"two", one, one, two, "one"'), ["one", "two"]) def test_with_naughty_input(self): """ Test with naughty input. """ # Bad users! Naughty users! self.assertEqual(parse_tags(None), []) self.assertEqual(parse_tags(""), []) self.assertEqual(parse_tags('"'), []) self.assertEqual(parse_tags('""'), []) self.assertEqual(parse_tags('"' * 7), []) self.assertEqual(parse_tags(",,,,,,"), []) self.assertEqual(parse_tags('",",",",",",","'), [","]) self.assertEqual( parse_tags('a-one "a-two" and "a-three'), ["a-one", "a-three", "a-two", "and"], ) def test_recreation_of_tag_list_string_representations(self): plain = Tag(name="plain") spaces = Tag(name="spa ces") comma = Tag(name="com,ma") self.assertEqual(edit_string_for_tags([plain]), "plain") self.assertEqual(edit_string_for_tags([plain, spaces]), '"spa ces", plain') self.assertEqual( edit_string_for_tags([plain, spaces, comma]), '"com,ma", "spa ces", plain' ) self.assertEqual(edit_string_for_tags([plain, comma]), '"com,ma", plain') self.assertEqual(edit_string_for_tags([comma, spaces]), '"com,ma", "spa ces"') @override_settings(TAGGIT_TAGS_FROM_STRING="tests.custom_parser.comma_splitter") def test_custom_comma_splitter(self): self.assertEqual(parse_tags(" Cued Speech "), ["Cued Speech"]) self.assertEqual(parse_tags(" ,Cued Speech, "), ["Cued Speech"]) self.assertEqual(parse_tags("Cued Speech"), ["Cued Speech"]) self.assertEqual( parse_tags("Cued Speech, dictionary"), ["Cued Speech", "dictionary"] ) @override_settings(TAGGIT_STRING_FROM_TAGS="tests.custom_parser.comma_joiner") def test_custom_comma_joiner(self): a = Tag(name="Cued Speech") b = Tag(name="transliterator") self.assertEqual(edit_string_for_tags([a, b]), "Cued Speech, transliterator") class DeconstructTestCase(SimpleTestCase): def test_deconstruct_kwargs_kept(self): instance = TaggableManager(through=OfficialThroughModel, to="dummy.To") name, path, args, kwargs = instance.deconstruct() new_instance = TaggableManager(*args, **kwargs) self.assertEqual( "tests.OfficialThroughModel", new_instance.remote_field.through ) self.assertEqual("dummy.To", new_instance.remote_field.model) class InheritedPrefetchTests(TestCase): def test_inherited_tags_with_prefetch(self): child = Child() child.save() child.tags.add("tag 1", "tag 2", "tag 3", "tag 4") child = Child.objects.get() no_prefetch_tags = child.tags.all() self.assertEqual(4, no_prefetch_tags.count()) child = Child.objects.prefetch_related("tags").get() prefetch_tags = child.tags.all() self.assertEqual(4, prefetch_tags.count()) self.assertEqual( {t.name for t in no_prefetch_tags}, {t.name for t in prefetch_tags} ) class TagListViewTests(TestCase): model = Food def setUp(self): super().setUp() self.factory = RequestFactory() self.slug = "green" self.apple = self.model.objects.create(name="apple") self.apple.tags.add(self.slug) self.strawberry = self.model.objects.create(name="strawberry") self.strawberry.tags.add("red") def test_url_request_returns_view(self): request = self.factory.get(f"/food/tags/{self.slug}/") queryset = self.model.objects.all() response = tagged_object_list(request, self.slug, queryset) self.assertEqual(response.status_code, 200) self.assertIn(self.apple, response.context_data["object_list"]) self.assertNotIn(self.strawberry, response.context_data["object_list"]) self.assertEqual( self.apple.tags.first(), response.context_data["extra_context"]["tag"] ) def test_list_view_returns_single(self): response = self.client.get(f"/food/tags/{self.slug}/") self.assertEqual(response.status_code, 200) self.assertIn(self.apple, response.context_data["object_list"]) self.assertNotIn(self.strawberry, response.context_data["object_list"]) class RelatedNameTests(TestCase): def test_default_related_name(self): food = Food.objects.create(name="apple") food.tags.add("green") tag = Tag.objects.get(food=food.pk) self.assertEqual(tag.name, "green") def test_custom_related_name(self): name = Name.objects.create() name.tags.add("foo") tag = Tag.objects.get(a_unique_related_name=name.pk) self.assertEqual(tag.name, "foo") class OrderedTagsTest(TestCase): def test_added_tags_are_returned_ordered(self): obj = OrderedModel.objects.create() obj.tags.add("green", "red", "orange", "yellow", "blue") self.assertListEqual( ["blue", "green", "orange", "red", "yellow"], list(obj.tags.values_list("name", flat=True)), ) def test_ordered_by_creation_by_default(self): """ Test that the tags are set and returned exactly as they are provided in .set """ str_tags = ["red", "green", "delicious"] sample_obj = TestModel.objects.create() sample_obj.tags.set(str_tags) self.assertEqual(str_tags, [tag.name for tag in sample_obj.tags.all()]) def test_default_ordering_on_mixed_operation(self): """ Test that our default ordering is preserved even when mixing strings and objects """ tag_obj = Tag.objects.create(name="mcintosh") tag_obj_2 = Tag.objects.create(name="fuji") str_tags = ["red", "green", "delicious"] sample_obj = TestModel.objects.create() sample_obj.tags.set([tag_obj_2] + str_tags + [tag_obj]) expected_results = [tag_obj_2.name] + str_tags + [tag_obj.name] self.assertEqual(expected_results, [tag.name for tag in sample_obj.tags.all()]) class PendingMigrationsTests(TestCase): def test_taggit_has_no_pending_migrations(self): out = StringIO() call_command("makemigrations", "taggit", dry_run=True, stdout=out) self.assertEqual(out.getvalue().strip(), "No changes detected in app 'taggit'") def test_tests_have_no_pending_migrations(self): out = StringIO() call_command("makemigrations", "tests", dry_run=True, stdout=out) self.assertEqual(out.getvalue().strip(), "No changes detected in app 'tests'") class NaturalKeyTests(TestCase): @classmethod def setUpTestData(cls): cls.tag_names = ["circle", "square", "triangle", "rectangle", "pentagon"] cls.filename = "test_data_dump.json" cls.tag_count = len(cls.tag_names) def setUp(self): self.tags = self._create_tags() def tearDown(self): self._clear_existing_tags() try: os.remove(self.filename) except FileNotFoundError: pass @property def _queryset(self): return Tag.objects.filter(name__in=self.tag_names) def _create_tags(self): return Tag.objects.bulk_create( [Tag(name=shape, slug=shape) for shape in self.tag_names], ignore_conflicts=True, ) def _clear_existing_tags(self): self._queryset.delete() def _dump_model(self, model): model_label = model._meta.label with open(self.filename, "w") as f: call_command( "dumpdata", model_label, natural_primary=True, use_natural_foreign_keys=True, stdout=f, ) def _load_model(self): call_command("loaddata", self.filename) def test_tag_natural_key(self): """ Test that tags can be dumped and loaded using natural keys. """ # confirm count in the DB self.assertEqual(self._queryset.count(), self.tag_count) # dump all tags to a file self._dump_model(Tag) # Delete all tags self._clear_existing_tags() # confirm all tags clear self.assertEqual(self._queryset.count(), 0) # load the tags from the file self._load_model() # confirm count in the DB self.assertEqual(self._queryset.count(), self.tag_count) def test_tag_reloading_with_changed_pk(self): """Test that tags are not reliant on the primary key of the tag model. Test that data is correctly loaded after database state has changed. """ original_shape = self._queryset.first() original_pk = original_shape.pk original_shape_name = original_shape.name new_shape_name = "hexagon" # dump all tags to a file self._dump_model(Tag) # Delete the tag self._clear_existing_tags() # create new tag with the same PK Tag.objects.create(name=new_shape_name, slug=new_shape_name, pk=original_pk) # Load the tags from the file self._load_model() # confirm that load did not overwrite the new_shape self.assertEqual(Tag.objects.get(pk=original_pk).name, new_shape_name) # confirm that the original shape was reloaded with a different PK self.assertNotEqual(Tag.objects.get(name=original_shape_name).pk, original_pk) def test_get_by_natural_key(self): # Test retrieval of tags by their natural key for name in self.tag_names: tag = Tag.objects.get_by_natural_key(name) self.assertEqual(tag.name, name) def test_wrong_number_of_args(self): # Test that get_by_natural_key raises an error when the wrong number of args is passed with self.assertRaises(ValueError): Tag.objects.get_by_natural_key() django-taggit-6.1.0/tests/urls.py000066400000000000000000000004461467620475500167620ustar00rootroot00000000000000from django.contrib import admin from django.urls import re_path from .views import FoodTagListView urlpatterns = [ re_path( r"^food/tags/(?P[a-z0-9_-]+)/$", FoodTagListView.as_view(), name="food-tag-list", ), re_path(r"^admin/", admin.site.urls), ] django-taggit-6.1.0/tests/views.py000066400000000000000000000002621467620475500171260ustar00rootroot00000000000000from django.views.generic.list import ListView from taggit.views import TagListMixin from .models import Food class FoodTagListView(TagListMixin, ListView): model = Food django-taggit-6.1.0/tox.ini000066400000000000000000000021301467620475500155640ustar00rootroot00000000000000[tox] minversion = 1.9 envlist = black flake8 isort py{38,39,310,311,312}-dj{41,42} py{310,311,312}-dj{50} py{310,311,312}-djmain docs [gh-actions] python = 3.8: py38, black, flake8, isort 3.9: py39 3.10: py310 3.11: py311 3.12: py312 [testenv] deps = dj41: Django>=4.1,<4.2 dj42: Django>=4.2,<5.0 dj50: Django>=5.0,<5.1 djmain: https://github.com/django/django/archive/main.tar.gz coverage djangorestframework setenv = PYTHONWARNINGS=all commands = coverage run -m django test --settings=tests.settings {posargs} coverage report coverage xml ignore_outcome = djmain: True ignore_errors = djmain: True [testenv:black] basepython = python3 skip_install = true deps = black commands = black --target-version=py38 --check --diff . [testenv:flake8] basepython = python3 skip_install = true deps = flake8 commands = flake8 [testenv:isort] basepython = python3 skip_install = true deps = isort>=5.0.2 commands = isort --check-only --diff . [testenv:docs] deps = sphinx commands = sphinx-build -n -W docs docs/_build