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

相关推荐
CodeCraft Studio3 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
程序员爱钓鱼4 小时前
Go语言实战案例 — 工具开发篇:实现一个图片批量压缩工具
后端·google·go
困鲲鲲4 小时前
Python中内置装饰器
python
摩羯座-185690305945 小时前
Python数据可视化基础:使用Matplotlib绘制图表
大数据·python·信息可视化·matplotlib
爱隐身的官人5 小时前
cfshow-web入门-php特性
python·php·ctf
gb42152876 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
THMAIL6 小时前
量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
linux·人工智能·python·深度学习·机器学习·金融
~-~%%6 小时前
从PyTorch到ONNX:模型部署性能提升
人工智能·pytorch·python
蒋星熠6 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
ChinaRainbowSea6 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程