Updating docs
parent
c276bef4f3
commit
8857f3be28
30
README.rst
30
README.rst
|
|
@ -20,10 +20,32 @@ Quick start
|
||||||
2. In your models.py create classes which extend dbview.models.DbView
|
2. In your models.py create classes which extend dbview.models.DbView
|
||||||
like this::
|
like this::
|
||||||
|
|
||||||
.. literalinclude:: example.py
|
.. code-block:: python
|
||||||
:languague: python
|
from django.db import models
|
||||||
:emphasize-lines: 9-26
|
from dbview.models import DbView
|
||||||
:linenos:
|
|
||||||
|
class ModelA(models.Model):
|
||||||
|
fielda = models.CharField()
|
||||||
|
fieldc = models.IntegerField()
|
||||||
|
|
||||||
|
|
||||||
|
class MyView(DbView):
|
||||||
|
fieldA = models.OneToOneField(ModelA, primary_key=True,
|
||||||
|
db_column='fielda__id')
|
||||||
|
fieldB = models.IntegerField(blank=True, null=True, db_column='fieldb')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def view(klass):
|
||||||
|
'''
|
||||||
|
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)
|
||||||
|
|
||||||
3. Then create a migration point for your view generation, edit that migration
|
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
|
and modify it, add: `from dbview.helpers import CreateView` and replace the line
|
||||||
|
|
|
||||||
25
example.py
25
example.py
|
|
@ -1,25 +0,0 @@
|
||||||
from django.db import models
|
|
||||||
from dbview.models import DbView
|
|
||||||
|
|
||||||
class ModelA(models.Model):
|
|
||||||
fielda = models.CharField()
|
|
||||||
fieldc = models.IntegerField()
|
|
||||||
|
|
||||||
|
|
||||||
class MyView(DbView):
|
|
||||||
fieldA = models.OneToOneField(ModelA, primary_key=True,
|
|
||||||
db_column='fielda__id')
|
|
||||||
fieldB = models.IntegerField(blank=True, null=True, db_column='fieldb')
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def view(klass):
|
|
||||||
'''
|
|
||||||
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)
|
|
||||||
Loading…
Reference in New Issue