Metadata-Version: 2.1
Name: django-query-view
Version: 0.1.6
Summary: Django view for querying data
Home-page: https://github.com/enricobarzetti/django-query-view
License: MIT
Author: Enrico Barzetti
Author-email: enricobarzetti@gmail.com
Requires-Python: >=3.8,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: django-crispy-forms (>=1.10.0,<2.0.0)
Requires-Dist: django-extensions (>=3.1.0,<4.0.0)
Requires-Dist: django-filter (>=23.5,<24.0)
Requires-Dist: django-taggit (>=6.0.0,<7.0.0)
Requires-Dist: django_jinja (>=2.7.0,<3.0.0)
Requires-Dist: django_jinja_helpers (>=0.2.0,<0.3.0)
Requires-Dist: furl (>=2.1.0,<3.0.0)
Requires-Dist: taggit-selectize (>=2.10.0,<3.0.0)
Description-Content-Type: text/x-rst

Django Query View
=================

Django view for querying data

Installation
------------

To get the latest stable release from PyPi

.. code-block:: bash

    pip install django-query-view

Usage
-----

Set up models
-------------

.. code-block:: python

    from django.db import models
    from taggit.managers import TaggableManager
    from taggit.models import TaggedItemBase
    from query_view.models import TypedTag
    from query_view.models import make_typed_tag_tagged_model

    class TaggedThing(TaggedItemBase):
        content_object = models.ForeignKey('Thing', on_delete=models.CASCADE)


    class Thing(models.Model):
        name = models.CharField(max_length=200)
        is_good = models.BooleanField()

        tags = TaggableManager(through=TaggedThing, blank=True)

        def __str__(self):
            return self.name

    # Subclass TypedTag
    class ActorTypedTag(TypedTag):
        pass

    # Create your tagged model like this
    ActorTaggedThing = make_typed_tag_tagged_model('ActorTaggedThing', ActorTypedTag, Thing, app_label='testproject')

    # Or like this
    class ActorTaggedThing(TaggedItemBase):
        typed_tag = models.ForeignKey(
            ActorTypedTag,
            related_name="%(app_label)s_%(class)s_items",
            on_delete=models.CASCADE,
        )
        content_object = models.ForeignKey(Thing, on_delete=models.CASCADE)

        class Meta:
            unique_together = ['typed_tag', 'content_object']

Create a typed tagged item
-----------------------------

.. code-block:: python

    t = Tag.objects.get(name='clint eastwood')
    ActorTaggedThing.objects.create(content_object=thing, typed_tag=t.actortypedtag)

Run the test project
--------------------

.. code-block:: bash

    python manage.py migrate
    python manage.py loaddata testproject/fixtures/tag_thing.json
    python manage.py runserver

Dump fixture
------------

.. code-block:: bash

    python manage.py dumpdata --indent 4 testproject.Thing testproject.TaggedThing taggit.Tag testproject.LanguageTypedTag testproject.LanguageTaggedThing testproject.DirectorTypedTag testproject.DirectorTaggedThing testproject.ActorTypedTag testproject.ActorTaggedThing --output testproject/fixtures/tag_thing.json

