Django | model-字段-UUIDField
模型字段中 UUIDField 类型小记
进来在一个小应用中使用了 UUIDField
字段类型,在视图写完跑单元测试时,发现获取的结果和我期望的不一致....。
1 使用 UUIDField
class BaseBackBone(models.Model):
"""model docstring"""
id = models.UUIDField(primary_key=True, default=UUIDTools.uuid1_hex, editable=False)
class Meta:
abstract = True
所使用的 UUIDTools.uuid1_hex
代码如下:
import uuid
class UUIDTools(object):
"""uuid function tools"""
@staticmethod
def uuid1_hex():
"""
return uuid1 hex string
eg: 23f87b528d0f11e696a7f45c89a84eed
"""
return uuid.uuid1().hex
2 在终端中跑个测试
http http://127.0.0.1:8000/blog/category/
HTTP/1.0 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Date: Sat, 08 Oct 2016 10:00:01 GMT
Server: WSGIServer/0.2 CPython/3.5.2
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
[
{
"id": "e6e6ddca-8d2d-11e6-85b8-f45c89a84eed",
"name": "Django"
}
]
可以看到返回的 id
字段中有横岗,我查了数据库发现,数据库中是没有横杠
e6e6ddca8d2d11e685b8f45c89a84eed
很有意思,存到数据库中时,是不带横杠的,即自定义的函数返回的结果;但是显示时,带有小横杠,哈。
3 产生原因
翻了 Django
源代码
def to_python(self, value):
if value and not isinstance(value, uuid.UUID):
try:
return uuid.UUID(value)
except ValueError:
raise exceptions.ValidationError(
self.error_messages['invalid'],
code='invalid',
params={'value': value},
)
return value
重点是 return uuid.UUID(value)
这一句,原来如此。
4 解决方法
4.1 直接使用 CharField 字段
直接使用 CharField
, 就不存在什么横杠的问题了。
4.2 重写 to_representation 方法
重写对应 serializers
中的 to_representation
方法即可。
4.3 自定义 UUIDField 字段
自定义继承 models.UUIDField
的字段,然后重写 to_python
方法
黑月亮
点滴记录,步步成长
推荐阅读
centos | 修改静态 IP
设置 Centos 为使用静态 IP1 修改网络配置 {代码...} 修改后的内容如下 {代码...} 2 重启网络服务 {代码...} 3 查看地址 {代码...} 参考来源:[链接]
青阳半雪阅读 1.8k评论 3
二、Django
Django 提示:本文根据b站黑马python课整理链接指引 => 黑马程序员python企业级开发项目-手把手从0到1开发《美多商城》MVT图解项目准备1.创建项目 {代码...} 2.创建应用 {代码...} 3.更换python解释器 {代码.....
玲小叮当阅读 1.1k
Mysql到TiDB迁移,双写数据库兜底方案
TiDB 作为开源 NewSQL 数据库的典型代表之一,同样支持 SQL,支持事务 ACID 特性。在通讯协议上,TiDB 选择与 MySQL 完全兼容,并尽可能兼容 MySQL 的语法。因此,基于 MySQL 数据库开发的系统,大多数可以平滑迁...
京东云开发者阅读 1k
三、djanjo
Django 提示:本文根据b站黑马python课整理链接指引 => 黑马程序员python企业级开发项目-手把手从0到1开发《美多商城》视图介绍和项目准备视图介绍视图就是应用中views.py文件中的函数视图的第一个参数必须为H...
玲小叮当阅读 920
一、Django
Django 提示:本文根据b站黑马python课整理链接指引 => 黑马程序员python企业级开发项目-手把手从0到1开发《美多商城》一、Django介绍1.1 MVT模式M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数...
玲小叮当阅读 805
Django笔记二十二之多数据库操作
在第十篇笔记的时候,简单介绍过 using() 的使用方法,多个数据库就是通过 using(db_alias) 的方式来来指定选中的数据库,这里介绍一下同步库表结构时候的操作。
Hunter阅读 795
Django笔记十三之select_for_update等选择和更新等相关操作
本篇笔记将介绍 update 和 create 的一些其他用法,目录如下:get_or_createupdate_or_createselect_for_updatebulk_createbulk_update1、get_or_create前面我们介绍过 get() 和 create() 的用法,那么 get_or_cr...
Hunter阅读 738
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。