semvec/pypi-packages huggingface dataset:
dj-querytools 0.2.3
Some utility functions to perform complex queries with the Django ORM

# dj-querytools

A collection of functions to make it a little easier to build aggregation SQL queries for Django projects

## Installation

```
pip install dj-querytools
```

## Usage

### Simple aggregation:

Assuming the following model:

```
class Todo(models.Model):
    owner = models.CharField(max_length=30)
    title = models.CharField(max_length=30)
    status = models.CharField(max_length=30, choices=TODO_STATUSES)
    size = models.PositiveIntegerField(default=1)
    due = models.DateField()
    due_time = models.DateTimeField()
```

### `group_by_and_aggregate`

**Example**

```python

group_by_and_aggregate(
    qs,
    'size',
    'Sum'
)
>> 20
```

### `group_by_and_annotate`

Performs the aggregation and groups by the provided field:

**Example**

```python

result = group_by_and_annotate(
    qs,
    'status',
    'Count'
)
>> {'D': 5, 'N': 1, 'P': 8}
```

### `as_timeseries`

```
qs = Todo.objects.filter(owner="Jack")
as_timeseries(
    qs,
    'due_time',
    'id',
    'Count',
    '2018-11-01',
    '2018-11-10'
)
>> [{'x': '2018-11-01', 'y': 3.0}, {'x': '2018-11-02', 'y': 3.0}, {'x': '2018-11-03', 'y': 0}, {'x': '2018-11-04', 'y': 2.0}, {'x': '2018-11-05', 'y': 2.0}, {'x': '2018-11-06', 'y': 0}, {'x': '2018-11-07', 'y': 0}, {'x': '2018-11-08', 'y': 0}, {'x': '2018-11-09', 'y': 0}, {'x': '2018-11-10', 'y': 0}]
```

### `pivot_table`

Given a flat queryset, group it by one or more fields.

* fields are comma seperated
* optionally provide a serializer function to serialize items (otherwise it will just append the queryset row)

```python
result = pivot_table(qs, 'owner,status', serialize_todo)

>> {'Jack': {'N': [{'title': 'Day year outside whatever int'}], 'P': [{'title': 'Answer society close example '}, {'title': 'Raise real individual general'}], 'D': [{'title': 'Number organization particula'}, {'title': 'Least activity herself than c'}, {'title': 'Country local pretty yourself'}]}, 'Jane': {'P': [{'title': 'Prevent do still teacher grou'}, {'title': 'Include they management first'}, {'title': 'Number court few loss sort mu'}, {'title': 'That federal end local dream '}, {'title': 'Able ask listen. Cost ball me'}, {'title': 'Bad know meeting compare room'}], 'D': [{'title': 'Through town stay able car di'}, {'title': 'Tree design candidate because'}]}}
```

## periodic_breakdown

`from querytools.tools import periodic_breakdown`

Provide an aggregation broken down by a period (Trun(kind=)).

See: https://docs.djangoproject.com/en/2.1/ref/models/database-functions/#django.db.models.functions.TruncMonth

**Defaults:**

* `kind='month'`
* `aggregate_field='ok'`
* `aggregation = 'Count'`

```python

# simple case:
result = periodic_breakdown(qs, 'due')

# slighly more fancy:
result = periodic_breakdown(
    qs,
    'due',
    aggregate_field='size',
    aggregation = 'Sum'
)
```


## Other stuff

* For full functionality list, see `spec.txt`
* For examples, check `example_app/tests.py`

## Contributing

**Update the spec:**

```
python manage.py test --testrunner=testreporter.runner.BDDTestRunner
```