我就废话不多说了,大家还是直接看代码吧~
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 模型字段设置默认值代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
问题内容: 假设我有一个模型: 目前,我正在使用默认的admin创建/编辑此类型的对象。如何从管理员中删除该字段,以使每个对象都无法使用值创建,而是将接收默认值? 问题答案: 设置为和为默认值。 http://docs.djangoproject.com/en/dev/ref/models/fields/#editable 另外,你的字段是不必要的。Django将自动添加它。
问题内容: 我有以下模型代码: 但是我希望,它将生成类似 这没有发生,当我运行它时会产生: 深入研究的代码并进行谷歌搜索没有给我任何好处,但是James Bennet的注释不被认为会影响生成,但是Django管理员需要它。即使是这样,我如何获得理想的效果? 我的版本是1.3.0最终版 问题答案: 请注意,该参数也可以采用可调用对象:https : //docs.djangoproject.com/
问题内容: 我有一个模型如下: 我也有上述模型的模型形式,如下所示: 我想知道如何为该坦克隐藏字段设置默认值。这是我到目前为止显示/保存表格的功能: 问题答案: 你有两个选择,可以在调用表单构造函数时填充值: 或在表单定义中设置值:
问题内容: 我有一个模型,希望包含一个主题名称及其首字母。(数据在某种程度上是匿名的,并且通过缩写来跟踪。) 现在,我写了 如最后一行所示,我希望能够将姓名的首字母实际作为字段(与名称无关)存储在数据库中,但是会使用基于名称字段的默认值进行初始化。但是,我遇到了问题,因为Django模型似乎没有“自我”。 如果将行更改为,则可以执行syncdb,但不能创建新主题。 在django中,有一个可调用函
我有一个表单,其中有些字段不是模型的字段。在发送到渲染之前,我想在我的视图中填充它们.. 我的表格: 我的视图代码: 谢啦
问题内容: 我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的架构,如下所示: data.avsc: 我正在使用 avro-maven-plugin v1.7.6 生成Java模型。 当我使用:创建模型的实例时 ,它会失败并出现以下异常: org.apache.avro.AvroRuntimeException:org.apache.avro.AvroRuntimeException:字