简介:今天,首席CTO Note将与您分享Django默认数据库的相关内容。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!
Julhanghui WMS开放源仓库管理系统
项目简介:
完整的开源仓储管理软件,遵循Apache许可证2.0协议,将前端和后端分开,并且是完全开源的。API使用Rentful协议来促进二级发展。前端代码是用Quasar.Multi-Position,交付浪潮,采摘,牛奶运营和其他商业模式构建的。
软件版权编号:2018SR517685
GitHub地址:
githubgithub.com/singosgu/greatewms
演示地址:
大WMS开放源仓库管理系统
业务联系:mail@56yhz.com
技术交换:GreaterWMS-01(加上微信条目组)
项目原始意图:
我在供应链行业工作了15年,发现在我们的专业领域,没有高级和高定义软件来深入支持我们的业务。大多数软件都关闭了,很难做到这一点二级发展。即使开发,周期非常长,并且未能开发的情况都比比皆是。该公司选择了软件,其第二次开发也将受开发公司的约束。至于第二次开发成本,只能说。因此,我设计了这款Ju Shanghui WMS,以实现高度的自由度和仓库管理软件的高客户开发,以深入支持企业的业务。
愿景:如果您从事非行业的工作,并且热爱您的行业,那么请使用技术来改变他。
生命周期
v 1.0.0 - 2019年7月至2020年12月(因为1.0.0版本的第二个开发设计更为复杂,2.0被重写))
v 2.0.0- 2020年12月?2021年3月(重写业务逻辑,本机自行构建的API开发文档,添加真实的 - 时间通信,方便企业用户可以相互通信)
v 2.1.0 - 2021年3月至2021年6月(添加了客户与企业之间的实时交互,以增强企业与客户之间的业务联系,实现VMI)
v 2.2.0-6-6月2020年?2021年9月(供应商与企业之间的实时互动增加,增强企业与供应商之间的业务联系,并实现牛奶运营和看板拉力)
v 2.3.0 - 2021年9月?2021年12月(股票管理原型,最初添加了神经网络,深度学习清单的更改)
v 3.0.0- 2021年12月至2022年3月(完全植入了神经网络,使上游和下游公司能够整体运营整体业务)
v 3.1.0 - 2022年3月3日至2022年6月(区域仓库业务布局,通过深度学习,实现的多软件运营,最小化的成本)
发展环境:
Python版本为v 3.8.0 +
django版本为v 3.1.0 +(此版本Django仅是异步的真实时间通信的原生)
Django-Rest-Framework版本是V 3.12.2 +(Django-Rest-Framework的较高版本与Django3更好地兼容)
Django-Silk版本为v 4.1.0(如果部署并启动了它,请关闭丝绸。丝绸仅用于调试API接口速度,这可能会泄漏用户信息)
Quasar版本为v1.7.2 +(您可以查看Quasar的官方网站,以编辑大wms前端代码:Quasar官方网站)
VUE版本为v 2.6.0 +(尽可能不使用VUE3,因为开发环境不使用VUE3,我不知道会发生什么问题)
API,遵循宁静的架构
构造命令:
下载代码:
git克隆
安装Python库:
PIP安装-R要求.txt
注意:安装需要扭曲的库。有时,该库将不会安装。您需要下载本地安装
下载地址:扭曲
PIP安装扭曲{您下载的版本名称}
注意:注意本地安装的路径
初始化数据库:
python manage.py makemigrations
迁移数据库:
python manage.py迁移
创建数据库,Django默认为数据库。如果我需要MySQL数据库,请在oreaterwms/settings.py中配置数据库。
开发服务器操作:
开发和操作:
Daphne -P 8008大wms.asgi:申请
生产服务器操作:
监督监护人流程:
PIP安装主管
使用主管保护Django过程,然后使用Nginx进行反向代理。至于crrevisor教程,有许多教程。
NGINX支持:
建议使用nginx进行部署。部署时,您需要指定Websocket链接。如果未指定,真实的时间通信功能将报告错误
还需要在Axios_request.js中修改WS_URL
##示例在更改之前
const baseurl =''
const wsurl ='ws://127.0.0.0.1:8008/'
##示例更改
const baseurl ='https://您的域名/'
const wsurl ='wss://您的域名/websocket/'
如果服务器启用了SSL,请使用HTTPS和WSS。如果未启用SSL,请使用HTTP和WS
修改后,您需要重新构建前端代码
发展扩展:
由于使用了前端和后端分离设计,因此您可以通过API开发更多的软件应用程序
物流智能AGV
AGV项目也是开源的。由于场地有限,仅智能交付,固定点库,可追溯传感器,超声波障碍物避免,红外障碍物避免传感器,所有指令均通过网络传输,AGV被绑定,AGV绑在Mac地址和IP地址上确保安全。前提是您需要一所覆盆子学校。
卖
您可以将其直接用作输入和库存系统,简化仓库库设置和其他操作。
应用程序和小程序
可以将Quasar直接包装到iOS应用程序和Android应用中
可以通过API开发小程序的开发,但是小程序不支持PUT请求,因此您需要编写另一个请求接口。
API的组合可以达到100万种,因此我们可以根据查询请求获得真实的时间报告和数据监视
供应链管理系统
产品数量,创建时间和使用的最后时间是统计信息,因此可以方便
v 2.3.0及其未来版本将带来自己的深度学习分析,因此您可以将分析结果直接用作供应链管理系统工具
多软件管理
OpenID是用户数据的唯一徽标。数据组均匀地识别为appid,因此很方便
接送,交货
您可以设置固定的时间将请求发送到服务器以实现Wave -to -plick选择的功能
您也可以通过API查询分析结果直接使用任务工作,建议使用APSCHEDULER
~~~ python pip安装apscheduler ~~~
牛奶运营
v 2.2.0及以上版本将在本地支持此功能
如果您现在需要此业务,可以根据API调用库存消费以实现此功能
VMI
v 2.1.0及其上述版本将在本地支持此功能
如果您现在需要此业务,可以根据API调用库存消费以实现此功能
选择路线优化
当前的采摘路线是根据仓库进行排序的
v.3.0版本将在本地支持此功能
如果现在需要此业务,您可以根据每日选择详细信息致电API以实现此功能
开发指南:
baseurl
这是启动请求的基本网站。如果是本地调试,默认值是如果它部署在服务器中,则需要更改为您的网站以访问URL
修改方法是修改Axios_request.js,并注意
django-silk
Django-Silk是用于开发的调试工具,以计算每个接口的响应速度。如果有必要部署到生产环境,请删除Django-Silk相关的配置,因为存在泄漏用户信息或直接修改Django-Silk库的风险,让用户只看到他们的请求数据
数据库存储
数据库设计考虑了诸如数据迁移之类的问题,因此只有用户_id和django在用户中作为外部键都包含User_id。所有其余字段均未使用。它方便用于数据备份和数据库迁移
数据库是4个阶段设计
验证数据用户属于
验证数据安全性
验证数据可以存储在数据库中
留在数据库中并返回响应
关于数据传输
您需要将令牌值添加到所有请求头标题中。此值是用户数据唯一徽标OpenID
所有数据传输都需要将内容类型设置为应用程序/JSON
OpenID
OpenID是注册用户数据的唯一标识。当管理员直接注册时,将有开发人员= 1个管理员徽标。
您可以根据开发人员徽标进行自定义二级开发
苹果
appid是用户数据组的唯一徽标
如果您需要多个公司才能进行更多操作或运营,则可以使用Appid进行统一的链接来实现多组合和多位置操作
用户权利
如果没有太多对用户权限的限制,请根据自己的业务需求进行次要开发限制
业务流程:
行政人员
单击注册,您可以注册为管理员帐户,以实现初始化程序设置
注册后,您将获得2个ID和1个开发人员徽标。OpenID是用户数据组的唯一徽标。此OpenID下的所有数据均受OpenID的约束。appid是用户组数据的唯一徽标。功能,开发者徽标是一个布尔值,正确意味着这是一个管理员帐户
两种类型的用户登录:
使用OpenID和员工名称直接登录
管理员使用帐户和密码登录
登录后,前端将存储登录信息
您可以通过查看我的OpenID来查看用户数据组的OpenID
如果您需要多个公司和更多仓库运营,请注意更改OpenID
有关更多管理员的权限,请自行开发
员工管理
在注册管理员之后,创建一个新员工
员工有2个字段,suff_name(用于员工登录),Staff_Type(员工类型以控制员工的权限)
该系统对员工权威没有任何限制。如果需要员工权威,请根据企业的业务模型独自修改模板
单击编辑以修改员工信息
单击删除以删除员工信息。系统将在后台调整iS_DELETE为true
单击Contatic:
您可以实时与您的员工聊天,但您无法与自己聊天
您可以创建一个新的备忘员员工,该员工实际上用作备忘录
在个人中心,您可以查看最近的联系人
消息徽标将提醒您现在有多少个未读消息
驾驶员管理
驾驶员管理仅在交货过程中使用
您需要知道哪个驾驶员正在捡起并拿走了货物
仓库设置
仓库
仓库的创建只能创建一个仓库,现在可以创建它,但是只有第一个才能起作用
如果您需要更多职位,则可以将appid用于二级开发,也可以直接创建管理员帐户
仓库中的城市必须填写。这用于计算货运
bin_property
库属性确定仓库中货物的哪些属性
四个属性:损坏,锁定(锁定),检查,正常(正常)
在beta版本中,可以修改和删除属性,官方版本将不会删除和修改
所有交货只能与普通图书馆的商品相匹配
收到的货架和移动的库将根据库的属性直接修改库存数量。仓库中的库存量不会显得负面
bin_size
仓库的大小是帮助操作员检查是否可以将货物放入图书馆
当前版本未检查架子和数据库的大小,将来将添加自动检查
bin_set
库设置是必需的,通常库设置是水平垂直和垂直的,例如A010101,即水平01垂直01水平01垂直
库的设置需要设置库属性和大小,并且该属性非常重要。他决定该图书馆中的商品是否是普通商品
基本设置
公司
公司基本信息的创建只能创建一家公司,现在可以创建它,但是只有第一个才能发挥作用
如果您需要多个公司来处理,则可以将appid用于二级开发,也可以直接创建管理员帐户
必须填补公司的城市。
供应商
供应商的基本信息
必须填补供应商的城市。
顾客
客户基本信息
必须填补客户的城市。
产品管理
单元
产品的单元将初始化系统的创建,但您可以自己添加和修改它
班级
可以单独添加和修改商品的类型
色彩
产品的颜色,系统将初始化创建,但您可以自己添加和修改它
品牌
可以单独添加和修改产品的品牌
形状
产品的形状,系统将初始化创建,但您可以自己添加和修改它
眼镜
可以自己添加和修改产品的规格
起源
产品的起源可以自行添加和修改
商品清单
商品清单
固定资产
首都
创建固定资产,不做太多扩展,只记录和使用
可以计算托盘帐户,等等。
库存管理
股票清单
图书馆中货物的总库存数据
ONHAND_STOCK现有库存
可以订购,可用于订购和运输库存数量,因为已经订购了一些商品,尽管存在现有库存,但不能再订购了
订购库存,已放置的商品数量
ASN库存,我已经收到了到达的通知,但是尚未确认的商品数量
DN股票已被放置,但尚未确认订单数量
预先负载,期望商品数量
预先排序,已经到达,卸载,等待排序的商品数量
分类库存,商品的分类,等待货架的货物数量
采摘股票,送货订单已经产生,等待采摘的商品数量
采摘的股票,已捡起的商品数量,等待与驾驶员交流的商品数量
返回订单库存
垃圾箱
总库存,该产品的所有库存
采摘库存,此仓库中的采摘者数量
采摘股票,选择此数据库的数量已完成
移至bin,移动库,然后移动库后,将根据库属性直接更新库存的数量。如果所有库级都清空,则将库作为空图书馆位置更新
空垃圾箱
空图书馆详细信息
被占领的垃圾箱
非空存储
收据管理
ASN到达通知状态
ASN状态= 1,创建了ASN的到达通知,状态1是唯一可以删除和修改ASN信息的状态。他将在交货前展示,也就是说,有一个到达的通知,但尚未到达,单击确认。交货,也就是说,确认货物已经到达,目前已更新到2更长的修改ASN信息
ASN状态= 2,扩展并开发驱动程序以排队。如果我们有很多驱动程序到达,则可以将其制成排队系统。单击装载加载以确认货物已卸载。ASN状态已更新为3,商品信息将出现在分类中。目前,ASN状态表示已将货物卸载到仓库并等待排序
ASN状态= 3,货物排序是一个必要的过程。没有商品排序。到4,确认排序,等待货架
目前,排序的页面将出现在需要放在架子上的详细信息上。单击“移动到垃圾箱”完成。当然
交付管理
DN交货订单状态
DN状态= 1,创建DN交付表格。目前,该订单仍可以修改,系统中的库存量不会更改。单击确认订单。换零,同时将自动更新系统中的货物清单数量,例如CAN订单数量和订单数量
DN状态= 2,这是确认等待选择顺序的过程,您可以单击订单发布以生成订单的选择列表。如果所有订单都是相关的,那么库存匹配根据时间。当库存不足时,将生成后源,即欠订单。在此过程中,DN单个数字将更改,例如更多的客户。该订单将按顺序统一选择。如果无法满足客户订单,则不会对欠款的产生感到满意。如果欠订单不太匹配,则不会重新出现在新订单中。DN状态将更新为3,即等待选择的过程。当确认的订单和欠款是状态的状态为2时
DN状态= 3,直接选择,此功能将出现在Beta5更新中,暂时未更新
DN状态= 4,已发货和传输,此功能将出现在Beta6更新中,暂时未更新
DN状态= 5,客户签名,此功能将出现在Beta7更新中,未临时更新
DN状态= 6,收据结束,订单已关闭,此功能将出现在Beta7更新中,暂时未更新
返回管理
RO返回订单此功能将出现在官方版本中
货运管理
运输费API已经完成,前端尚未更新。如果要使用它,则可以直接致电付款中的运输费API。
公共关系数据库PostgreSQL,MySQL,Oracle,SQLite都得到了支持。正式推荐PostgreSQL关系数据库。
除上述内容外,还支持以下数据源:
SAP SQL任何地方
IBM DB2
Microsoft SQL Server
火鸟
ODBC
使用多个数据库
Django 1.2中的新内容:请,请参阅发行说明
大多数其他文档都假定假设一个数据库。本文主要讨论如何在django中使用多个数据库。使用多个数据库添加一些步骤。
定义您的数据库
使用Multi -Data库的第一步是设置要通过数据库使用的数据库服务。此设置用于绘制当事方和特定连接设置字典,这是DJANGO定义数据库的一致方法。请参阅数据库文档文档。在字典中。
您要在使用数据库之前使用。
这是一个settings.py代码平板电脑,定义两个数据库。定义默认的PostgreSQL数据库和一个称为用户的MySQL数据库:
:{'name':'user_data','引擎':'django.db.backends.mql','user':'mysql_user','password':'priv4te}}}}}}}}
如果您尝试访问数据库设置中未定义的数据库,Django将抛出Django.db.utils.connectiondotexist异常。
同步您的数据库
SynCDB Management命令一次仅操作一个数据库。在默认情况下,它操作默认数据库。但是添加-DATABASE参数,您可以使SynCDB同步不同的数据库。,您可以使用以下命令:
$ https://www.shouxicto.com/article/manage.py syncdb
$ https://www.shouxicto.com/article/manage.py syncdb -database =用户
如果您不同步同一数据库中的所有程序,则可以定义数据库路由以实现指定模型的特定控制策略。
如果要仔细控制同步,则有另一种方法可以修改SQLALL的输出,手动在数据库中执行命令,该命令如下:
$ https://www.shouxicto.com/article/manage.py sqlass销售|https://www.shouxicto.com/article/manage.py dbshell
使用其他管理命令
其他操作数据库的django-admin.py命令类似于SynCDB。他们一次仅操作一个数据库,然后使用 - 数据库来控制使用哪个数据库。
自动数据库路由
使用最简单的数据库的最简单方法是设置数据库路由解决方案。默认路由方案确保对象“关闭”其原始数据库(例如:哪个数据库是从获得数据库的哪个数据库,以及保存哪个数据库)。默认路由方案还确保如果未指定数据库,则所有查询将对默认数据库作用。
您不必为启动默认路由方案做任何事情,因为它“立即使用”。但是,如果要执行一些更有趣的数据库分配行为,则可以定义和安装自己的数据库路由。
数据库路由
数据库路由是类。此类最多有四种方法:
db_for_read(模型,**提示)
建议模型对象使用操作过程中使用的数据库。
如果数据库操作可以为选择数据库提供其他信息,则可以通过提示字典提供。请参见下面的详细信息。
如果没有建议,请无返回。
db_for_write(模型,**提示)
建议模型对象读取操作过程中使用的数据库。
如果数据库操作可以为选择数据库提供其他信息,则可以通过提示字典提供。请参见下面的详细信息。
如果没有建议,请无返回。
laster_relation(obj1,obj2,**提示)
当obj1和obj2之间存在关系时,返回了true,不允许返回错误,或者在没有意见时返回,这是一个纯粹的验证操作,该操作用于该操作外部钥匙和多个操作。
laster_syncdb(db,型号)
确定该模型是否可以与DB的数据库同步为别名。如果您可以返回true,如果您不能返回false,或者在没有意见时返回无返回。此方法用于确定给定数据库的模型是否为可用的。
一种路由不需要提供所有这些方法,这些方法可以省略其中一个或多个。如果省略了其中一种方法,则Django将在执行相关检查期间跳过相应的路线。
提示参数
数据库路由收到的“提示”参数可用于确定哪个数据库应接收给定的请求。
目前,可以提供的唯一提示参数是一个实例,即与读取操作相关的实例。它可以是保留对象的实例,也可以是添加到更多关系中的实例。在某些情况下,也可能会提供一个实例。路由检查实例是否存在,并决定是否相应地更改路线行为。
使用路线
数据库路由是使用Database_routers设置安装的。此设置定义了类名的列表,每个类都定义了主路由的路由(django.db.router)。
主要路由用于Django分配的数据库操作。查询想知道使用哪个数据库时,它将提供模型和提示(如果是这样),并调用主路由。
Django将按顺序尝试每条路线,
在找到适当的路由建议之前。如果找不到路由,您将尝试实例提示的当前_state.db。如果没有路由提示,或者实例没有当前数据库状态,则
主要路由将分配默认数据库。
一个例子
例如目的!
此示例仅用于显示数据库的使用。此示例有意忽略一些复杂的事物,以方便如何更好地显示路线。
如果任何MyApp中的模型都包含另一个数据库中的模型的关系,则此示例无效。请参阅交叉数据库关系部分中介绍的Django参考完整性问题。
此示例的主要/来自该示例的配置也有缺陷:它不处理复制延迟(例如,因为通过将写作操作传递给数据库生成的查询是不一致的),并且不考虑与数据库使用情况的交互战略。
那么,此示例有什么用?此示例仅用于在其他数据库中演示MyApp存在。所有其他模型都是主/一致的,并且存在于Master,Slave1和Slave2数据库中。此示例使用两个路由:
类MyApprouter(Object):“” A“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”。myApp':返回'''返回none def def db_for_write(self,model,**提示):“ myapp应用程序中模型的操作到'other''if model._meta.app_lbel =='app_label ='app_label ='meta。:返回'其他'返回none none def lasse_relation(self,obj1,obj2,**提示):“如果模型包含myApp应用程序,则允许所有关系”如果OBJ1._META.APP_LABEL =='或obj2.2._Meta.app_meta.app_label.app_label。):“所有阅读操作都指向一个随机数据库”返回随机。写入操作指向主数据库“ return'” return'master'def lasse_relation(self,obj1,obj2,**提示):“数据库池中两个对象之间的任何关系” db_list =('ma ma ma master',''slave1','slave2')如果obj1._state.db in db_list和obj2._state.db in db_list中:返回true return note note note note
然后在设置文件中添加以下内容(将路径替换为您定义路由的模型路径):)::):
database_routers = ['path.to.myapprouter','path.to.Masterslaverouter']]
在此设置中,路由的顺序非常重要,因为查询是按查询期间按顺序查询的。在上面的示例中,myApprouter首先放置在Masterslaverouter中,因此MyApp中的模型优先于其他型号。IF。更改了数据库_ROUTER设置中两个路由的顺序,然后将首先执行MasterSlaverouter.alla_syncdb()。由于Masterslaverouter都是 - 包含 - 这将导致所有模型使用所有数据库。
设置后,让我们运行一些代码:
#获fred = user.objects.gets(username ='fred')fred.firt_name ='frederick'#database fred.save.save()#person.objects.gets.get(name ='douglas adams')#何时新对象是创建的,没有分配的数据库MH = book(title ='主要是无害')#此分配将向路由发送请求,并将MH数据库设置为相同的#database mh.author = dna#这将强制强制'MH'实例使用主数据库... mh.save()#...但是,如果我们重新观察对象,我们将获得mh = mh = mh = book.objects.gets.get(title ='主要是无害')
手动选择数据库
Django还提供了一个API,可让您通过代码完全控制数据库。手动定义数据库分配优先。
为查询集选择数据库
您可以在查询集“链”中选择数据库。我们使用使用()在查询集中使用()使用()来获取指定数据库的另一个查询集。
使用()使用一个参数:您要运行查询的别名。例如:
#这将在“ default” database.author.objects.all()#上运行,这也将在“默认” database.author.objects.usings.using('default')上运行。all()#这将在“其他”数据库中运行。author.objects.using('其他')。全部 ()
选择一个数据库以保存()
在使用model.save()时添加使用的关键字以指定保存哪个数据库。
例如,将对象保存到legacy_users数据库:
my_object.save(使用='legacy_users')
如果您不使用使用定义,则根据路由分配,Save()方法将将数据保存到默认数据库中。
将一个对象从一个数据库移动到另一个数据库
将对象保存在数据库中后,您可以使用保存(使用= ...)将该对象移动到另一个数据库中。但是,如果您不使用适当的方法,则可能会产生意外的后果。
假设以下示例:
p = person(name ='fred')
首先,一个新人对象保存在第一个数据库中。这次,P没有主键,因此Django执行了插入SQL语句。这将创建一个主密钥并将此主键分配给P。
在第二个句子中,由于p已经有一个主键,django将在保存对象时尝试在新数据库中使用此主键。如果在第二个数据库中不使用此主密钥,则不会出现问题,并且没有问题,并且对象将被复制到新数据库。
但是,如果P的主要键已在第二个数据库中使用,则使用此主键的第二个现有对象将由P介绍。
有两种避免上述情况的方法。首先,您可以删除实例的主要键。如果对象没有主键,Django将将其视为新对象,并且在保存时不会导致数据丢失在第二个数据库中:
p = person(name ='fred')p.save(fusth ='first')p.pk = none#清除主键。
第二种方法是使用force_insert选项来确保Django执行插入SQL:
p = person(name ='fred')p.Save(used ='first')
这可以确保名为FRD的人在两个数据库中使用相同的主键。如果将主键保存到第二个数据库时占用,则会丢弃错误。
选择数据库删除数据
在默认情况下,获得了现有对象的哪个数据库,将在此数据库中执行此对象的删除:
u = user.objects.using('legacy_users')。获取(用户名='Fred')u.delete()#
通过将使用的关键字参数传递到model.delete()方法,您可以定义数据库中的数据。使用使用情况类似于save()方法中的此参数。
例如,假设我们将用户从lagacy_users数据库移动到new_users数据库以使用以下命令:
user_obj.save(user ='new_users')user_obj.delete(use ='lectacy_users'))
在许多数据库中使用经理
在管理器上使用db_manager()允许管理器访问非默认数据库。
例如,假设您有一个自定义的管理器user.objects.create_user()。
因为create_user()是一个管理方法,而不是查询集,所以你不能
使用user.objects.using('new_users')。create_user()。(create_user()方法
它只能用于user.objects经理,而不是用于从管理器派生的查询集。)解决方案是使用db_manager(),就像以下内容一样:
user.objects.db_manager('new_users')。创建用户 (...)
db_manager()返回绑定到您指定的数据库的管理器的副本。
在许多数据库中使用get_query_set()
如果在管理器中重新加载get_query_set(),请确保使用相同的方法(使用super())或正确处理管理器中的_db属性(您想在管理器中使用的数据库名称)。
例如,如果您从get_query_set方法返回自定义查询集类别,则可以执行此操作:
类Mymanager(models.manager):def get_query_set(self):qs = customqueryset(self.model),如果self._db none none:qs.using(seld._db)返回QS QS QS QS QS QS QS QS QS QS QS QS QS QS QS
在Django管理接口中使用多数据库
Django的管理接口显然不支持许多数据库。如果您想支持,则必须编写一个自定义的模型。
如果要支持数据库,则ModelAdmin对象具有五个要自定义的方法:
类MultidBmodelAdmin(admin.modeladmin):#方便定义数据库名称常数。usist='其他'def save_model(self,request,request,obj,obj,form,conse):#让django保存对象到'其他'数据库。obj.save(使用= self.using)def delete_model(self,request,obj):#让django从'其他''''database.obj.delete(used = self.ususe)def quryset(self,request)中删除对象:#让django在'其他'数据库中搜索对象。return super(multidbmodeladmin,self).quelySet(request).using(self.using)def form form form form form form formfield_for_foreignkey(self,db_field,request = none,** kwargs):#########
结论:以上是首席CTO注释引入的Django默认数据库的全部内容。我希望这对每个人都会有所帮助。如果您仍然想进一步了解这一点,请记住收集并关注此网站。