Metadata-Version: 2.1
Name: django-view-models
Version: 0.0.2
Summary: Django models backed by database views
Home-page: https://github.com/quadrant-newmedia/django_view_models
Author: Alex Fischer
Author-email: alex@quadrant.net
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: Django (<4,>=2.2)

# django_view_models

Designed for Postgres. May or may not work with other databases.

## Installation/Usage
- `pip install django_view_models`
- add `django_view_models` to `INSTALLED_APPS`
- define view models (see below)
- `python manage.py sync_view_models` (run after every view definition change)

## Defining View Models

You must define the fields on your model, and either define `VIEW_DEFINITION` or `view_query` on your model. 

Note that just like regular models, django will add an integer primary key called `id`, unless you set `primary_key=True` on one of your fields.

```python
from django.db import models
from django_view_models.models import ViewModel, MaterializedViewModel

class Book(models.Model):
    title = models.TextField()
    is_good = models.BooleanField()

# create a ViewModel with a manual query
class GoodBook(ViewModel):
    title = models.TextField()

    VIEW_DEFINITION = '''
        SELECT id, title
        FROM my_app.book
        WHERE is_good = true
    '''

# create a ViewModel, and use Django's ORM to create the query
class BadBook(ViewModel):
    title = models.TextField()

    def view_query():
        return Book.objects.filter(is_good=False).values('id', 'title')
```

