* Add changes for django 2.0
Made the following changes to ensure compatibility with django 2.0:
1. Replaced function calls to `is_authenticated()` with reference to
property `is_authenticated`.
2. Added try/except call to import `django.core.urlresolvers` (now
called `django.urls`.
Also added an `... as ...` statement to ensure that references in the
code to `urlresolvers` don't need to be changed.
3. Fixed calls statement of `on_delete` arg to all ForeignKey
fields.
Note that previously a kwarg was acceptable, but this is now a
positional arg, and the selected `on_delete` method has been
retained.
* Update tox tests and consequentual changes
Updated tox.ini to also test django 2.0 on python 3+. Some changes made
to previous commits required to ensure all tests passed:
- Added `compat.py` to have a `is_authenticated()` function to check
authentication.
This was necessary as the property/method call for `is_authenticated`
is no compatible between django 1.8 (LTS) and 2.0.
Changed AuditLogMiddleware to call this compatibility function instead
of the django built-ins as a result.
- Changes made to `auditlog/models.py` to apply kwargs to both `to=` and
`on_delete=` for consistency of handling in all version tested.
Incorrect django version specified for tox.ini. Now fixed.
* Add 'on_delete' kwarg to initial migration
Added and re-arranged 'on_delete' and 'to' kwargs in initial migration
to ensure compatbility with later versions of Django.
Also included updated manifest with changes required due to django 2.0
work.
* Add TestCase for compat.py
Added simple test case for compat.py file.
* Changes follow code review 2017-12-21
* More changes following code review 2017-12-28
1. Added detailed commentary to `compat.py` to ensure reason why
`is_authenticated()` compatibility function is needed
2. Changed `hasattr` to `callable` in compat.is_authenticated()
3. Fixed typo in migration 0001 to use correct `on_delete` function
Fixes#93 - Add 'changes_display_dict' property to 'LogEntry' model to display diff in a more human readable format
'changes_display_dict' currently handles fields with choices, long textfields and charfields, datefields, timefields, and datetimefields. Supports `django-multiselectfield` with choices and Postgres's ArrayField with choices.
Textfields and Charfields longer than 140 characters are truncated with an ellipsis appended.
Date, Time and DateTime fields are rendered according to `L10N`, or if turned off fall back on Django settings defaults for DATE_FORMAT, TIME_FORMAT and DATETIME_FORMAT.
A new kwarg was added to 'AuditlogModelRegistry' called 'mapping_fields'. The kwarg allows the user to map the fields in the model to a more human readable or intuitive name. If a field isn't mapped it will default to the `verbose_name` as defined on the model or the Django default `verbose_name`. Partial mapping is supported, all fields do not need to be mapped to use the feature.
* Add django-multiselectfield test dep
* Add psycopg2 test dep
* Add postgres testing database and router
* Add postgres support to travis builds
* Add support for multiple databases. LogEntry saves to same database of the model its associated to
* If any literal evals fail default to None
* Add support for Postgres ArrayField in changes_display_dict
* Revert to old travis image while they are fixing issues with it
* Update docs
* Add full test coverage
Django converts the timezone of DateTimeFields to UTC when the field gets saved. This makes it so when you update a model which includes a DateTimeField, and your server is running in another timezone, the AuditLog will think you changed the timestamp, while it actually is the same time, but in another timezone. This commit adds a specific check in the model_instance_diff function for DateTimeField models (and any subclasses of it), which converts the old and new values to UTC before comparing them to see if they've actually changed. It also adds tests to see if the code works properly.
The extra test_setting (USE_TZ) is added because timezone support is disabled if it is not specified, this setting enables it.