欢迎来到代码驿站!

Python代码

当前位置:首页 > 软件编程 > Python代码

django 模型字段设置默认值代码

时间:2021-01-23 10:15:18|栏目:Python代码|点击:

我就废话不多说了,大家还是直接看代码吧~

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

上一篇:PYQT5设置textEdit自动滚屏的方法

栏    目:Python代码

下一篇:Keras―embedding嵌入层的用法详解

本文标题:django 模型字段设置默认值代码

本文地址:http://www.codeinn.net/misctech/49792.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有