我就废话不多说了,大家还是直接看代码吧~
class SitService(models.Model): applicationname = models.CharField(max_length=50,primary_key=True) ip = models.CharField(max_length=50) port = models.IntegerField(default=22) #设置默认值为22 path = models.CharField(max_length=50)
补充知识:django 设置默认值到SQL
环境:django 1.9.7
背景介绍
django migrate 生成表结构时,默认是不处理default(即字段的default 是在django 框架层面,没有到数据库层面)。当然,如果只用django 来做项目是没有任何问题的,但是如果同一个库被不同框架操作,那么怎么来管理这些表呢是个问题。
项目前端系统使用tornado,后端管理系统使用django, 鉴于这种情况,所以就用django来生成所有的表,但是在实际中,不通过django 插入的数据全都报错,一查看,全是默认值没有填写的情况。
历史变化
#470 "default" values should be expressed in SQL schema
#4800 Field's default value in model isn't passed to SQL
上面的fix已经过时太久,在1.9.7里面这些都是有的,只是屏蔽了default
详情
跟踪调试发现如下东西
在文件: django/db/backends/base/schema.py line:128
column_sql 方法有如下代码:
def column_sql(self, model, field, include_default=False): ... include_default = include_default and not self.skip_default(field) if include_default: default_value = self.effective_default(field) if default_value is not None: if self.connection.features.requires_literal_defaults: # Some databases can't take defaults as a parameter (oracle) # If this is the case, the individual schema backend should # implement prepare_default sql += " DEFAULT %s" % self.prepare_default(default_value) else: sql += " DEFAULT %s" params += [default_value] ...
同文件 create_model 方法在调用 column_sql,方法时,没有传递参数,skip_default 方法始终返回False
知道了这些后,我们只需要自定义 include_default 的值就好
当数据库用mysql, longtext and longblob 设置默认值会报错
include_default = False if sql in ['longtext', 'longblob'] else True
以上这篇django 模型字段设置默认值代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
django,模型字段,默认值
更新日志
- 黄妃.2020-色違【米乐士娱乐】【FLAC分轨】
- LouisHayes-ArtformRevisited(2024)[24Bit-96kHz]FLAC
- 永恒英文金曲精选5《TheBestOfEverlastingFavouritesVol.5》[WAV+CUE]
- 黑鸭子2005-紫丁香[首版][WAV+CUE]
- 林忆莲《爱上一个不回家的人》XRCD版[低速原抓WAV+CUE][999M]
- 经典《历届奥斯卡金曲回顾》[正版原抓WAV+CUE] [1G]
- 群星《试音草原·女声篇》经典蒙古民歌[WAV+CUE][1G]
- 炉石传说月末上分卡组推荐 国服月末最快上分卡组推荐
- 炉石传说月底最强卡组有哪些 2024国服月底最强卡组推荐
- 炉石传说月初最强卡组有哪些 2024月初最强上分卡组推荐
- 狼人杀亮相原生鸿蒙之夜 假面科技强势登陆华为生态
- 12小时光线挑战!AI画质专家才是大平层首选
- 2024游戏IP报告:1~9月规模1960亿 68%用户愿为之付费
- 群星.2024-今夜一起为爱鼓掌电视剧原声带【相信音乐】【FLAC分轨】
- BIGFOUR.2013-大家利事【寰亚】【WAV+CUE】