Welcome to thecut-durationfield’s documentation!¶
Contents:
Welcome to thecut-durationfield¶
This app provides a custom Django model field, RelativeDeltaField
, and
related form fields and widgets. RelativeDeltaField
stores time durations
using ISO 8601 representations, and returns dateutil.relativedelta
objects which may be used directly with datetime.datetime
objects.
This project was inspired by packages such as django-durationfield. However, this project focuses on:
- providing a database-agnostic, standards-compliant way of storing the durations in the database (using ISO 8601).
- returning
dateutil.relativedelta
objects that can be used to perform calculations ondatetime.datetime
objects.
Note that django-durationfield provides the ability to filter querysets
based on the relative size of the stored duration, which is not possible with
this project. I.e., you can’t use __lt
and __gt
etc., when filtering
by fields provided by this project.
Documentation¶
The full documentation is at https://thecut-durationfield.readthedocs.org.
Quickstart¶
Install thecut-durationfield
using the installation instructions found in the documentation.
Model field¶
from django.db import models
from datetime import datetime
from thecut.durationfield.models import RelativeDeltaField
class MyModel(models.Model):
duration = RelativeDeltaField(blank=True, null=True)
my_instance = MyModel(duration='P7D')
datetime(2014, 1, 1) + my_instance.duration # datetime(2014, 1, 8, 0, 0)
Form field¶
Two form fields are provided: RelativeDeltaChoiceField
and
RelativeDeltaTextInput
:
from django import forms
from thecut.durationfield.models import RelativeDeltaChoiceField
DURATIONS = [
('', 'Never'),
('P7D', 'One week'),
('P1M', 'One month'),
]
class MyForm(forms.ModelForm):
duration = RelativeDeltaChoiceField(choices=DURATIONS)
or, if you’d prefer to type in the (ISO 8601 compliant) value manually:
from django import forms
from thecut.durationfield.forms import RelativeDeltaTextInput
class MyForm(forms.ModelForm):
duration = RelativeDeltaTextInput()
Credits¶
See AUTHORS.rst
.
Installation instructions¶
Install via pip / pypi:
$ pip install thecut-durationfield
Add to your project’s
INSTALLED_APPS
setting:INSTALLED_APPS = [ # ... 'thecut.durationfield' # ... ]
Sync your project’s migrations:
$ python manage.py migrate durationfield
Usage¶
Testing¶
Running unit tests¶
Using your system’s Python / Django¶
You can perform basic testing against your system’s Python / Django.
Install the test suite requirements:
$ pip install -r requirements-test.txt
Ensure a version of Django is installed:
$ pip install Django
Run the test runner:
$ python runtests.py
Using a virtualenv¶
You can use virtualenv
to test without polluting your system’s Python environment.
Install
virtualenv
:$ pip install virtualenv
Create and activate a
virtualenv
:$ cd thecut-durationfield $ virtualenv . $ source bin/activate (thecut-durationfield) $
Follow ‘Using your system’s Python / Django’ above.
Using tox¶
You can use tox to automatically test the application on a number of different Python and Django versions.
Install
tox
:$ pip install -r requirements-test.txt
Run
tox
:(thecut-durationfield) $ tox --recreate
Tox assumes that a number of different Python versions are available on your
system. If you do not have all required versions of Python installed on your
system, running the tests will fail. See tox.ini
for a list of Python
versions that are used during testing.
Test coverage¶
The included tox
configuration automatically detects test code coverage with coverage
:
$ coverage report
History¶
2.0.3 (2016-08-15)¶
- Removed cross-document links from README.rst as it breaks pypi.
- Small fix to project’s setup file.
2.0.2 (2016-08-15)¶
- Documentation updates.
2.0.1 (2016-08-15)¶
- Documentation fixes.
- Testing fixes.
2.0 (2016-08-15)¶
- Added support for Django 1.10.
- Removed support for Django < 1.8.
- Restructured test suite.
- Restructured documentation.
1.0.8 (2015-08-26)¶
- Improved handling of seconds and milliseconds.
1.0.8 (2015-08-26)¶
- Improved handling of seconds and milliseconds.
1.0.7 (2015-03-17)¶
- Added Python 3 support.
1.0.6 (2014-07-28)¶
- Fix an issue which caused an empty
relativedelta
to be returned for a database NULL value. - Get
tox
up and running. - Update package for public release.
1.0.5 (2014-03-19)¶
- Remove
distribute
frominstall_requires
.
1.0.4 (2013-12-17)¶
- Fixed an issue with Postgres’s fixed-length 64 character field.
1.0.3 (2013-09-28)¶
- Minor code cleanup.
1.0.2 (20132-08-08)¶
- Add a Select widget for friendlier form input.
1.0.1 (2013-07-25)¶
- Fixes to south introspection rules.
1.0 (2013-07-25)¶
- First useful release with base model and form fields.
0.1 (2013-06-10)¶
- Initial release, mostly useless.
Credits¶
- Elena Williams <elena.williams@thecut.net.au>
- Matt Austin <matt.austin@thecut.net.au>
- Josh Crompton <josh.crompton@thecut.net.au>
- Bertrand Svetchine https://github.com/bsvetchine
- Kye Russell <kye.russell@thecut.net.au>
- Guillaume Andreu Sabater https://github.com/AGASS007