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
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
Hashes for django-separatedvaluesfield-0.3.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c0ff785c3b21419ab68ca18666ca45f0093b21de99eb06c8eecf8843d6f6b2b |
|
MD5 | 76799bfe03b95979e08b8d8bd31b4d12 |
|
BLAKE2b-256 | fe9b31b685863864ff5bba1d244202080bc8524ae2603c422ea8dd7882f65d85 |