Django数据初始化方法

开发中经常会遇到一些数据在程序的运行时就要在数据库中存在,所以就需要做数据的初始化。这里简单分享两种Django的数据初始化方法。

背景:项目app:role有两个mode: RoleType和UserRole,modol中已经写好了初始化方法:init_builtin_roles()init_builtin_user_roles()

一、使用migrations文件

  • 1、创建migrations文件
 python manage.py makemigrations --empty role

其中role是app名称

会生成如下图所示文件:

  • 2、在生成的文件中编写初始化数据方法
def init_data(apps, schema_editor):
    try:
        RoleType.init_builtin_roles()
        UserRole.init_builtin_user_roles()
    except Exception as e:
        logger.error(u‘数据初始化error:{}‘.format(e))

然后在operations中调用初始化方法:

operations = [
        migrations.RunPython(init_data)
    ]

最后生成的文件如下图所示:

  • 3、执行python manage.py migrate 即可完成数据初始化

二、使用AppConfig与信号post_migrate

  • 1、在app:role文件夹中创建apps.py文件, 在apps.py中编写初始化数据方法:
def app_ready_handler(sender, **kwargs):
    from models import RoleType, UserRole
    print ‘init builtin roles and user roles data‘
    try:
        RoleType.init_builtin_roles()
        UserRole.init_builtin_user_roles()
    except Exception as e:
        print ‘init builtin roles and user roles data exception: %s‘ % e

  • 2、继承AppConfig创建RoleConfig,在ready()方法中使用信号post_migrate来调用初始化方法:

信号post_migrate : 执行migrate命令后,自动触发

  • 3、配置default_app_config:默认情况下Django会自动走AppConfig,如果有改动需要重新配置。

在role下面的_init_.py文件中配置default_app_config

  • 4、最后执行python manage.py migrate即可。

原文地址:https://www.cnblogs.com/wangyingblock/p/12668463.html

时间: 2024-10-20 05:58:58

Django数据初始化方法的相关文章

浅谈数据初始化方法

浅谈数据初始化方法 在定制开发的信息化项目实施过程中,我们发现衡量一个项目成功与否,关键看以下三个指标: v人: 系统的利益相关人的需求是否都得到了满足: v系统:软件本身是否可用.易用.稳定.有效率: v数据:数据是否准确.可靠.稳定支持业务的运作: 从这个角度来说,数据在信息系统项目实施过程中有着举足轻重的地位,特别是数据初始化的成功与否是源头和决定因素.下面将数据初始化的过程分解为八个步骤,以确保数据初始化过程的严谨性和科学性. 步骤一:系统数据库表的分析:对信息系统数据库表进行分析,了解

ruby中tes-unitt数据初始化方法整理

在用ruby做测试时,很多时候需要一些数据初始化以及事后的数据恢复还原之类的操作,下面整理了这些方法.require "test/unit" class TestAnion <Test::Unit::TestCase #用例执行前只执行一遍初始化数据 def self.startup anion='startup' puts anion end #用例执行后只执行一遍初始化数据 def self.shutdown puts "shutdown" end #每一

Django数据查询方法总结

__exact 精确等于 like 'aaa'__iexact 精确等于 忽略大小写 ilike 'aaa'__contains 包含 like '%aaa%'__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains.__gt 大于__gte 大于等于__lt 小于__lte 小于等于__in 存在于一个list范围内__startswith 以-开头__istartswith 以-开头 忽略大小写__en

MATLAB实例:聚类初始化方法与数据归一化方法

MATLAB实例:聚类初始化方法与数据归一化方法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 聚类初始化方法:init_methods.m function label=init_methods(data, K, choose) % 输入:无标签数据,聚类数,选择方法 % 输出:聚类标签 if choose==1 %随机初始化,随机选K行作为聚类中心,并用欧氏距离计算其他点到其聚类,将数据集分为K类,输出每个样例的类标签 [X_num,

2015 IOS 学习笔记 面向对象 初始化方法 ——蓝懿教育

今天学习了面向对象以及初始化方法,这个在实际应用中比较重要,也比较抽象,所以要具体在实例中才能理解. ————————面向对象有三大特性—————— 一.封装 封装是对象和类概念的主要特性.它是隐藏内部实现,稳定外部接口,可以看作是“包装”.封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 好处:使用更简单变量更安全可以隐藏内部实现细节开发速度加快 OC中一个类可以继承另一个类,被继承的类成为超类(superclass),继承的

js jquery 页面加载初始化方法

一.js页面加载初始化方法 // 1.在body里面写初始化方法. <body onload='init()'> </body> <script type="text/javascript"> function init(){ // 初始化内容 } </script> // 2.window.onload=function(){} <script type="text/javascript"> window

合并多个python list以及合并多个 django QuerySet 的方法

在用python或者django写一些小工具应用的时候,有可能会遇到合并多个list到一个 list 的情况.单纯从技术角度来说,处理起来没什么难度,能想到的办法很多,但我觉得有一个很简单而且效率比较高的方法是我以前没注意到的.那就是利用 chain 方法来合并多个list. 同样也可以用来合并django 的 QuerySet. #coding:utf-8 from itertools import chain a = [1,2,"aaa",{"name":&qu

解析activity之间数据传递方法的详解

转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下 1  基于消息的通信机制 Intent--------boudle,extra用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等详细介绍下Intent机制Intent包含两部分:1 目的[action]-------要去到哪里去2 内容[category.data]----------路上带些什么,

Django的调试方法

web程序调试起来和桌面程序有着很大的差别,对于Django程序来说调试更是个问题.我们可以用postman发送http请求,下面就介绍几种调试方法: 1.在Eclipse+Pydev中调试Django 适用于测试环境. 可进行单步调试,查看变量值,当出现except时,可以用Python标准模块traceback的print_exc()函数查看函数调用链,是最强大的调试利器. 可参考http://my.oschina.net/chihz/blog/180573#OSC_h2_3 2.使用Dja