django自动创建model数据

目前使用的环境:django4.2.3,python3.10

django通过一些第三方库,可以轻易的自动生成一系列的后台数据。

首先先创建一个数据库:

然后,在setting.py中就可以指定我们新创建的数据库了。

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'machine_database_test',
        'USER': 'root',
        'PASSWORD': '123456',
        # The database server actually runs on the statusweb machine and
        # requires local authentication. This will work for both PAO and W2,
        # so this will save the settings_local.py need on W2.
        'HOST': '127.0.0.1',
    }
}

然后,需要执行数据迁移命令:

python 复制代码
python manage.py makemigrations
python manage.py migrate

最好在虚拟环境中执行这些内容,会比较方便:

然后,顺便创建一个超级用户:

python 复制代码
python manage.py createsuperuser

然后,看看需要下载的第三方包:

python 复制代码
pip install model_bakery

然后创建一个脚本,一般情况,都会放到一个app文件夹下。

脚本的名称,也不重要,我这里叫 baker_recipes.py,文件内容如下:

python 复制代码
import os
import django
from model_bakery import baker


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "machine_database.settings")
django.setup()

customers = baker.make('machines.Repository', _quantity=3)

这里有几个点需要注意:

第一,DJANGO_SETTINGS_MODULE 这个变量必须设置,否则运行的时候会报错,就像这样:

第二,django.setup() 一定要执行,否则设置不生效。

第三,baker.make()里面的第一个参数,其实就是给定的model表的名称,这里其实有两种写法

python 复制代码
import os
import django
from model_bakery import baker
from machines.models import Repository

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "machine_database.settings")
django.setup()

customers = baker.make('Repository', _quantity=3)

官网上是这么介绍的.....

但是,我这么做了,然后就反复的报错....

所以,最好不要这么干,就按照我上面的第一种写法,可以不导入model,直接以 app_name.model_name的方式直接用就好。

第四,baker.make() 中的 _quantity 参数的意思是,创建几个随机数据。

然后,之所写这篇帖子是因为,感觉这玩意儿,真挺6的....

先看看我的models.py:

python 复制代码
class Ethernet(models.Model):
    interface = models.CharField(max_length=32)

    class Meta:
        verbose_name_plural = 'Ethernet Interfaces'
        verbose_name = 'Ethernet Interface'


class Machine(models.Model):
    hostname = models.CharField(max_length=255, unique=True)
    ethernets = models.ManyToManyField(Ethernet, related_name='machine')

    def __str__(self):
        return "%s" % self.hostname

    class Meta:
        verbose_name_plural = 'machines'
        ordering = ['id']


class Repository(models.Model):
    description = models.TextField()
    machine = models.ForeignKey(Machine, on_delete=models.CASCADE)
    ethernet = models.ForeignKey(Ethernet, on_delete=models.CASCADE)
   

然后就能发现,Repository 这张表,跟两外两张表都有联系。所以,我只需要在 baker.make()中指定 Repository 这张表就可以了,由于它们之间的关联原因,baker会直接生成3张表的相关数据的。

执行上面的脚本就可以了,也很简单...

复制代码
python  baker_recipes.py

这里注意,执行一遍就好....否则你执行2遍就是创建 6 组数据....

看看结果:

可以吧,确实都造出来了....只是,随机数....比较长....稍微看起来,有点费劲....

当然,造随机数据的时候,也可以不全部随机,可以选择一些字段随机....

我就浅尝辄止....记录一下...更多的东西,官网有,感兴趣的小伙伴可以自己看看....

官网链接:Basic Usage --- Model Bakery 1.14.0 documentation

相关推荐
Assby2 分钟前
如何尽可能精确计算线程池执行 shutdown() 后的耗时?
java·后端
诸神缄默不语15 分钟前
Python处理Word文档完全指南:从基础到进阶
python
星浩AI24 分钟前
Google 官方发布:让你的 AI 编程助手"边写、边看、边调",像人类开发者一样工作
人工智能·后端·开源
海棠AI实验室42 分钟前
第四章 项目目录结构:src/、configs/、data/、tests/ 的黄金布局
python·项目目录结构
喵了个Code1 小时前
Spring Boot 3 + Spring Security + OAuth2 + Gateway企业级认证授权平台实现
后端
开心猴爷1 小时前
除了 Perfdog,如何在 Windows 环境中完成 iOS App 的性能测试工作
后端
桦说编程2 小时前
简单方法实现子任务耗时统计
java·后端·监控
爱笑的眼睛112 小时前
超越可视化:降维算法组件的深度解析与工程实践
java·人工智能·python·ai
盖世英雄酱581362 小时前
物品超领取损失1万事故复盘(一)
java·后端
凌览2 小时前
别再死磕 Nginx!http-proxy-middleware 低配置起飞
前端·后端