博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django自定义Field进阶笔记
阅读量:6293 次
发布时间:2019-06-22

本文共 2003 字,大约阅读时间需要 6 分钟。

hot3.png

jango 的官方提供了很多的 Field,但是有时候还是不能满足我们的需求,不过Django提供了自定义 Field 的方法。

get_prep_value 用于将Python变量处理后保存到数据库,使用和Django自带的 Field 一样。

from_db_value 函数用于转化数据库中的字符到 Python的变量

1.下面是自定义text存储到数据库

#coding:utf-8from django.db import models  class CompressedTextField(models.TextField):    """    model Fields for storing text in a compressed format (bz2 by default)    """    #转化数据库中的字符到Python的变量    def from_db_value(self, value, expression, connection, context):        if not value:            return value        try:            return value.decode('base64').decode('bz2').decode('utf-8')        except Exception:            return value    #将Python变量处理后保存到数据库    def get_prep_value(self, value):        if not value:            return value        try:            value.decode('base64')            return value        except Exception:            try:                return value.encode('utf-8').encode('bz2').encode('base64')            except Exception:                return value

 

2.自定义列表存储到数据库

from django.db import modelsimport ast class ListField(models.TextField):    __metaclass__ = models.SubfieldBase    description = "Stores a python list"     def __init__(self, *args, **kwargs):        super(ListField, self).__init__(*args, **kwargs)     def from_db_value(self, value):        if not value:            value = []         if isinstance(value, list):            return value         return ast.literal_eval(value)     def get_prep_value(self, value):        if value is None:            return value         return unicode(value) # use str(value) in Python 3     def value_to_string(self, obj):        value = self._get_val_from_obj(obj)        return self.get_db_prep_value(value)

使用它很简单,首先导入 ListField,像自带的 Field 一样使用:

class Article(models.Model):    labels = ListField()

在终端上尝试(运行 python manage.py shell 进入):

>>> from app.models import Article>>> d = Article()>>> d.labels[]>>> d.labels = ["Python", "Django"]>>> d.labels["Python", "Django"]

官方文档,!

转载于:https://my.oschina.net/liuyuantao/blog/1098912

你可能感兴趣的文章
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>