Django Mock Queries

2.3.0 · active · verified Thu Apr 16

django-mock-queries is a Python library designed for mocking Django queryset functions in memory during testing. It provides a way to simulate Django's ORM behavior, including method chaining, Q object filtering, aggregates, and CRUD operations, without needing a live database connection. The library is actively maintained, with the current version being 2.3.0, and receives regular updates to support newer Python and Django versions.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to create `MockSet` instances, populate them with `MockModel` objects, and perform common queryset operations like filtering, aggregation, Q-object filtering, and creating new mock objects. It mirrors typical Django ORM interactions in an in-memory test environment.

from django.db.models import Avg, Q
from django_mock_queries.query import MockSet, MockModel

# Example 1: Basic filtering
qs = MockSet(
    MockModel(mock_name='john', email='john@gmail.com'),
    MockModel(mock_name='jeff', email='jeff@hotmail.com'),
    MockModel(mock_name='bill', email='bill@gmail.com'),
)
results = [x for x in qs.all().filter(email__icontains='gmail.com').select_related('address')]
# print(results) # Expected: [<MockModel: john>, <MockModel: bill>]

# Example 2: Aggregation
qs_agg = MockSet(
    MockModel(mock_name='model s', msrp=70000),
    MockModel(mock_name='model x', msrp=80000),
    MockModel(mock_name='model 3', msrp=35000),
)
agg_result = qs_agg.all().aggregate(Avg('msrp'))
# print(agg_result) # Expected: {'msrp__avg': 61666.666...}

# Example 3: Filtering with Q objects
qs_q = MockSet(
    MockModel(mock_name='model x', make='tesla', country='usa'),
    MockModel(mock_name='s-class', make='mercedes', country='germany'),
    MockModel(mock_name='s90', make='volvo', country='sweden'),
)
q_results = [x for x in qs_q.all().filter(Q(make__iexact='tesla') | Q(country__iexact='germany'))]
# print(q_results) # Expected: [<MockModel: model x>, <MockModel: s-class>]

# Example 4: Creating objects
qs_create = MockSet(cls=MockModel)
new_obj = qs_create.create(mock_name='my_object', foo='1', bar='a')
# print(new_obj) # Expected: <MockModel: my_object>
# print([x for x in qs_create]) # Expected: [<MockModel: my_object>]

view raw JSON →