Django 如何使用多选枚举。
在Djngo orm 的使用过程中经常会遇到使用多选枚举的情况。但django 提供的models.CharField是单选的。咋办呢?提供两个思路,1、使用一对多,建立多张表实现。
2、第三方插件MultiSelectField库
先上案例:
from multiselectfield import MultiSelectField
# ...
MY_CHOICES = (('item_key1', 'Item title 1.1'),
('item_key2', 'Item title 1.2'),
('item_key3', 'Item title 1.3'),
('item_key4', 'Item title 1.4'),
('item_key5', 'Item title 1.5'))
MY_CHOICES2 = ((1, 'Item title 2.1'),
(2, 'Item title 2.2'),
(3, 'Item title 2.3'),
(4, 'Item title 2.4'),
(5, 'Item title 2.5'))
class MyModel(models.Model):
my_field = MultiSelectField(choices=MY_CHOICES)
my_field2 = MultiSelectField(choices=MY_CHOICES2, max_choices=3, max_length=3)
使用方法:
官网地址:https://pypi.org/project/django-multiselectfield/
1、安装
pip install django-multiselectfield
2、注册
Djnago项目的settings.py文件添加multiselectfield
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
#.....................#
'multiselectfield',
)
3、使用
model.py
from multiselectfield import MultiSelectField
# ...
MY_CHOICES = (('item_key1', 'Item title 1.1'),
('item_key2', 'Item title 1.2'),
('item_key3', 'Item title 1.3'),
('item_key4', 'Item title 1.4'),
('item_key5', 'Item title 1.5'))
MY_CHOICES2 = ((1, 'Item title 2.1'),
(2, 'Item title 2.2'),
(3, 'Item title 2.3'),
(4, 'Item title 2.4'),
(5, 'Item title 2.5'))
class MyModel(models.Model):
my_field = MultiSelectField(choices=MY_CHOICES)
my_field2 = MultiSelectField(choices=MY_CHOICES2, max_choices=3, max_length=3)
模板中使用:
{% for value , text in form.providers.field.choices %}
< div class = "ui slider checkbox" >
< input id = "id_providers_ {{ forloop .counter0 }} " name = " {{ form.providers.name }} " type = "checkbox" value = " {{ value }} " {% if value in checked_providers %} 选中="checked" {% endif %} >
< label > {{ text }} </ label >
</ div >
{% endfor %}
admin管理中的样式如下可多选
在视图中如何调用呢?
类名.objects.filter(字段__contains='TaskCalibration').values()
<QuerySet [{}]>