Custom field for Django to separate multiple values in database with a separator and retrieve them as list
Project description
Alternative to CommaSeparatedIntegerField built-in field that supports MultipleChoiceField, custom separator and returns values as list.
Installation
Install package from PyPi:
pip install django-separatedvaluesfield
Or download the archive from GitHub and proceed to a manual installation:
curl -L https://github.com/thoas/django-separatedvaluesfield/tarball/master | tar zx cd thoas-django-separatedvaluesfield python setup.py install
Add SeparatedValuesField to your Django model:
# models.py
from django.db import models
from separatedvaluesfield.models import SeparatedValuesField
class Project(models.Model):
name = models.CharField(max_length=150)
languages = SeparatedValuesField(
max_length=150,
token=',',
choices=(
('en', 'English'),
('fr', 'French')))
If your choices values are not strings, add the cast option with the type you want to apply on values (defaults to django.utils.six.text_type):
# models.py
from django.db import models
from separatedvaluesfield.models import SeparatedValuesField
class Project(models.Model):
name = models.CharField(max_length=150)
languages = SeparatedValuesField(
max_length=150,
cast=int,
token=',',
choices=(
(1, 'English'),
(2, 'French')))
If you are running Django <= 1.6, synchronize your database using syncdb:
python manage.py syncdb
If you are running Django >= 1.7, synchronize your database using migrate:
python manage.py migrate
The SeparatedValuesField behaves like a CharField which separates values with a token (default is ,).
This field is transformed as a MultipleChoiceField when you are creating a forms.ModelForm with your model.
Usage
>>> from myapp.models import Project
>>> project = Project(name='Project with strings', languages=['fr', 'en'])
>>> project.save() # save 'fr,en' in database for the column "languages"
>>> project.pk
1
>>> project = Project.objects.get(pk=1)
>>> project.languages
['fr', 'en']
# If you added "cast" option to the field to cast to 'int'
>>> project = Project(name='Project with integers', languages=[u'1', u'2'])
>>> project.save() # save '1,2' in database for the column "languages"
>>> project = Project.objects.get(pk=1)
>>> project.languages
[1, 2]
Contribute
Fork the repository
Clone your fork
Create a dedicated branch (never ever work in master)
Create your development environment with make dev
Activate your environment with source .venv/bin/activate
Make modifications
Write tests and execute them with make test
Be sure all test pass with tox
If all tests pass, submit a pull request
Compatibility
This library is compatible with:
python2.6, django1.5
python2.6, django1.6
python2.7, django1.5
python2.7, django1.6
python2.7, django1.7
python2.7, django1.8
python3.3, django1.5
python3.3, django1.6
python3.3, django1.7
python3.3, django1.8
python3.4, django1.5
python3.4, django1.6
python3.4, django1.7
python3.4, django1.8
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
File details
Details for the file django-separatedvaluesfield-0.3.2.tar.gz
.
File metadata
- Download URL: django-separatedvaluesfield-0.3.2.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 556e5dec4f30594ea06eff2f7683d79cb270d19f8b3ee45bdae396845bd56d33 |
|
MD5 | f330859dc2bc6017c124918cc0f9ba7f |
|
BLAKE2b-256 | 9688346f48ec40c2ddf902d7f125bc74718a93bb45a8dcaa4825ba5cf120d61b |