django自动创建model数据

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

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

首先先创建一个数据库:

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

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 manage.py makemigrations
python manage.py migrate

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

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

python manage.py createsuperuser

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

pip install model_bakery

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

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

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表的名称,这里其实有两种写法

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:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值