Go to file
Pietro Brenna 88009b9e99 Enable returning a qs (to allow query parameters) 2022-03-17 11:28:49 +01:00
dbview Enable returning a qs (to allow query parameters) 2022-03-17 11:28:49 +01:00
.gitignore change package version and fix some error 2020-05-27 16:06:30 +08:00
LICENSE Initial commit 2015-07-27 15:50:27 -03:00
MANIFEST.in Readme and other minor updates. 2020-11-20 13:45:31 +08:00
README.rst README update. 2022-02-09 10:28:55 +08:00
setup.py Bump version. 2021-09-08 16:40:01 +08:00

README.rst

####################
django-database-view
####################

A simple pluggable application that allows to work with database views.

Quick start
===========

1. Install the package::

    pip install django-database-view

2. In your ``models.py`` create classes which extend ``dbview.models.DbView``
   like this:

   .. code-block:: python

      from django.db import models
      from dbview.models import DbView

      class ModelA(models.Model):
          fielda = models.CharField(max_length=64)
          fieldc = models.IntegerField()

      class MyView(DbView):
          fieldA = models.OneToOneField(ModelA, primary_key=True,
              on_delete=models.DO_NOTHING, db_column='fielda__id')
          fieldB = models.IntegerField(blank=True, null=True, db_column='fieldb')

          @classmethod
          def view(cls):
              """
              This method returns the SQL string that creates the view,
              in this example fieldB is the result of annotating another column
              """
              qs = modelA.objects.all(
              ).annotate(
                  fieldb=models.Sum('fieldc'),
              ).annotate(
                  fielda__id=models.F('pk'),
              ).order_by(
                  'fielda__id',
              ).values(
                  'fielda__id',
                  'fieldb',
              )
              return str(qs.query)

   Alternatively ``get_view_str`` method could be used to write a custom SQL:

   .. code-block:: python

       class MyView(DbView):
           # ...

           @classmethod
           def get_view_str(cls):
               return """
                   CREATE VIEW my_view AS (
                   SELECT ...
               )"""

3. Then create a migration point for your view generation, edit that
   migration and modify it, add:
   ``from dbview.helpers import CreateView`` and replace the line the
   call to ``migrations.CreateModel`` with ``CreateView``.

4. Migrate your database and start using your database views.