Django 如何使用多选枚举。

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 [{}]>

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值