在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 [{}]>
color = EnumField ( Color , max_length = 1 )
m = MyModel . objects . filter ( color = Color . RED )
EnumIntegerField工作原理相同,但是基础存储机
django-multiselectfield
一个新的模型字段和表单字段。 有了这个,您可以从选项中选择多项。 以逗号分隔值的CharField形式存储到数据库中。
这个鸡蛋是受此启发的。
支持的Python版本:2.7、3.4+
支持的Django版本:1.4-2.0 +
用pip安装
$ pip install django-multiselectfield
配置您的models.py
from multiselectfield import MultiSelectField
# ...
MY_CHOICES = (( 'item_key1' , 'Item title 1.1' ),
( 'item_key2' , 'Item title 1.2' ),
( 'item_key3' , 'Item title
随着Django的不断发展,现在已经到了4.1版本。但是网上的资料大多数都是2.X版本的资料,很少涉及到新特性的使用案例,那么django的这些新特性,大家都在项目中使用到了吗?
本文参考:https://blog.csdn.net/lzw2016/article/details/81546311
有需要请阅读其原文介绍choice的使用,和在模板中的使用。
今天在开发中遇到将枚举字段反系列化,终于找到答案。
在django中设置模型如下的枚举字段
from django.contrib.auth.models import AbstractUser
class ...
本文介绍Django开发中通过model创建MYSQL数据库中包含ENUM枚举类型字段的表,方法如下:from django.db import modelsclass EnumField(models.Field):def __init__(self, *args, **kwargs):super(EnumField, self).__init__(*args, **kwargs)assert ...
4、在子应用的目录下新建一个 python 包 templatetags 用于书写过滤器 mysecondfilter.py。6、在根目录下新建一个文件夹 templates 编写htmll 文件 message.html。2、创建一个子应用 index,并在 setting.py 中注册子应用。3、创建子应用的路由 urls.py,在根路由中引入子路由。5、新建一个违禁过滤词库 和枚举的类 consts.py。3、创建视图函数 views.py。
Django的ORM模块是框架特色功能之一,它把数据表与Python类对应、表字段与类属性对应、类实例与数据记录对应,并将对类实例的操作映射到数据库中。开发者不再需要写SQL代码,可以更加专注地完成业务逻辑,极大地提高了开发效率。本章将围绕post应用首先创建应用需要的Models,之后介绍ORM API的使用方法,最后剖析ORM的实现原理。学会使用框架提供的功能是必要的,同时理解其实现原理往往会事半功倍。
4.1 构建post应用需要的数据表
4.1.1 post应用的Models定义
post应用
Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架
到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:
创建数据库,设计表结构和字段
使用 MySQLdb 来连接数据库,并编写数据访问层代码
业务逻辑层去调用数据访问层执行数据库操作
ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫–code first)
ORM:Object Relational Mapping(关系对象映射)
类名对应------》数据库中的表名
类属性对应-
离线安装django
django 3依赖以下几个第三方组件 sqlparsepytz,asgiref
在离线安装django建议先进行安装对应三个组件,执行完成完再进行django安装
django 创建项目
cd 到一个你想放置你代码的目录执行
django-admin startproject 项目名称
Django会生成一个符合Django项目标准的web项目结构的文件包,标准的Django项目主要包含两个部分:管理项目的命令行工具
manage.py ;项目实际所在的包,以项目名称命名的pytho
一.枚举类型示例
枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通过很多方法来实现它,例如字典、类等: WEEKDAY = { 'MON': 1, 'TUS': 2, 'WEN': 3, ...
# 【1】 字段
# AutoField() 自增类型,通常用在id上,诺不指定,逐渐id会自动添加在模型中
# CharField(max_length=?) 字符类型,必须给最大长度,默认的表单样式是Text Input
# TextField() 大文本类型,>4000使用,默认表单空间是Textarea
# IntegerField() 整数类型
# FloatField() 浮...
django复选MultiSelectField的使用一:安装二:使用场景
MultiSelectField介绍: https://pypi.org/project/django-multiselectfield/
pip install django-multiselectfield
二:使用场景
在django ORM的使用中,经常会出现选择的情况,例如:
class person...
我有一个Django应用程序,想要在用户的个人资料中显示多个选择复选框。 然后,他们将能够选择多个项目。这是我的models.py的简化版本:from profiles.choices import SAMPLE_CHOICESclass Profile(models.Model):user = models.ForeignKey(User, unique=True, verbose_name_(...
版权归作者所有,任何形式转载请联系作者。作者:petanne(来自豆瓣)来源:https://www.douban.com/note/301166150/1.多表连接查询:感觉django太NX了。class A(models.Model):name = models.CharField(u'名称')class B(models.Model):aa = models.ForeignKey(A)B....
1、 在eclipse中安装配置 svn资源库2.点击"Add",在弹出的窗口里,输入对应的SVN地址,然后"OK"http://subclipse.tigris.org/update_1.8.x3.将上图中将2个都选中,然后一路点Next,就可以了4、安装好后,重启eclipse,就可以看到svn视图了, 添加资源库地址5、删除本地项...
说明: 感谢飞天色鼠和javaeye论坛的sp2,其实是改了飞天色鼠的代码。sp2给了很大帮助,感谢! 演示效果: 调用代码如下: var auto_field=new Ext.form.MultiSelectField();if(contextlist==null){ auto_field.contextArray= [ [1,一],
本文实例讲述了Django框架多表查询。分享给大家供大家参考,具体如下:多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案.ForeignKey来自Django官方文档的模型示例:from django.db import modelsclass Blog(models.Model):name = models.CharField(max_length=100)ta...