Form and model fields for storing durations on Django modelsas ISO 8601 compliant strings, and returning relativedelta objects.
Project description
The Cut Duration Field
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 on datetime.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.
Usage
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()
Installation
Running the tests
Assuming you’ve checked out the code into a directory called thecut-durationfield, start by setting up your virtualenv:
$ cd thecut-durationfield
$ virtualenv . --no-site-packages
$ source bin/activate
(thecut-durationfield)$ pip install -r requirements-test.txt
and run the tests:
(thecut-durationfield)$ python runtests.py
Alternatively, you can run the tests across all supported versions of Python and Django with tox. After setting up and activating your virtualenv, install and run tox:
(thecut-durationfield)$ pip install tox
(thecut-durationfield)$ tox
CHANGES
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 from install_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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for thecut-durationfield-1.0.7.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e341ac58ec63bb0aa47915edd3885438880a7f9b1c3c6163aa11809508880ca |
|
MD5 | 0f2205920f916d04adfb57fefc1c05df |
|
BLAKE2b-256 | 3cbb9012efe629a09e9548460779dd64d409a4b4b36f0e7023705c87992c861f |
Hashes for thecut_durationfield-1.0.7-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | afcbcc09da5ea6cd6ec0f1797834a99619b2ef164ec724d8559e6cf45c5499b1 |
|
MD5 | a05b4d1130e5a5c069502a4ca4f38706 |
|
BLAKE2b-256 | 243f66f422c9aac62ab0365595da1e8d8c32dbefe1f294b315d7a33bc643e7e5 |