What about creating a proxy subclass of `Publication` with an overridden `__reduce__` method returning the previous `django_version` instead.

```python
class PreviousDjangoVersionPublication(Publication):
    class Meta:
        proxy = True

    def __reduce__(self):
        model_unpickle, (class_id, defers, deferred_class_factory), data = super(
            PreviousDjangoVersionPublication, self
        ).__reduce__()
        data['django_version'] = float(get_major_version()) - 0.1 # previous major version
        return model_unpickle, (class_id, defers, deferred_class_factory), data
```

With this class defined the test could be simplified greatly and avoid monkey patching.