A rest query request args parser for django orm.
Project description
A rest query request args parser for django orm. like no-sql select style.(/?select=id,name,author{*}&id=gte.20&order=id.desc).
Installing
pip install django-rest-query
Test
python setup.py test
Usage
Django orm must use project shell. so wo start demo project:
django-admin startproject demo
Add Model:
class School(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
class Meta:
db_table = 'School'
def __str__(self):
return 'School: {}'.format(self.name)
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
age = models.IntegerField()
school = models.ForeignKey(School)
class Meta:
db_table = 'Author'
def __str__(self):
return 'Author: {}'.format(self.name)
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
author = models.ForeignKey(Author)
publisher = models.ForeignKey(Publisher)
class Meta:
db_table = 'Book'
def __str__(self):
return 'Book: {}'.format(self.name)
Usage:
python manage.py shell
>>> from django_rest_query import *
>>> from demo.models import Book, Author, School
>>> args = {
'select': 'id,name,author{id,name,school{*}}',
'id': 'gte.20',
'author.id': 'in.10,20,30,40,50',
'order': 'id.desc',
'page': 1,
'limit': 5
}
>>> builder = DjangoQueryBuilder(Book, args)
builder.select
['author__school__*', 'author__id', 'author__name', 'id', 'name']
>>> build.where
{'author__id__in': [10, 20, 30, 40, 50], 'id__gte': '20'}
>>> builder.order
['-id']
>>> builder.paginate
(1, 5)
{'start': 0, 'end': 5, 'limit': 5, 'page': 1}
>>> builder.build()
<QuerySet [Book: Python], [Book: Javascript]>
License
MIT
Contacts
Email: huiquanxiong@gmail.com