如何解决Django创建时自动将数据加载到数据库表中
我想在运行python manage.py makemigrations时自动将预定义的数据加载到数据库表中
例如,如果我有模型
class Test(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=2)
value = models.IntegerField(default=0)
def __str__(self):
return str(self.name)
我希望此数据库表在创建时使用以下数据填充自身(运行python manage.py makemigrations和python manage.py migration时)
id|name|value|
--------------
1 | AA | 0 |
2 | AB | 0 |
3 | AC | 0 |
4 | AD | 0 |
5 | AE | 0 |
6 | AF | 0 |
7 | AG | 0 |
8 | AH | 0 |
9 | AI | 0 |
10| AJ | 0 |
11| AK | 0 |
. | | |
. | | |
. | | |
xx| ZZ | 0 |
--------------
解决方法
您可以使用灯具来实现。
首先,您不需要此id
字段,默认情况下,Django会为每个模型提供准确的此字段id = models.AutoField(primary_key=True)
class Test(models.Model):
name = models.CharField(max_length=2)
value = models.IntegerField(default=0)
def __str__(self):
return str(self.name)
然后转到您的应用并创建一个fixtures
目录。
我创建以下代码来生成您的灯具:
from itertools import product
import json
def generate_fixture():
char_pairs = list(product(map(chr,range(97,123)),repeat=2))
data = []
for i in range(0,len(char_pairs)):
data.append(
{
"model": "yourappname.test",# change yourappname
"pk": i+1,"fields": {"name": ''.join(char_pairs[i]),"value": 0}
},)
file = open('filename.json','w') # change filename
file.write(json.dumps(data,indent=2))
file.close()
if __name__ == "__main__":
generate_fixture()
在运行此代码之前更改yourappname
和filename
。
结果是使用以下结构从aa
到zz
包含676个对象的json:
[
{
"model": "yourappname.test","pk": 1,"fields": {
"name": "AA","value": 0
}
},]
最后,将json文件复制并粘贴到yourapp / fixtures中,然后运行python manage.py loaddata jsonfilename
在Fixture文件夹中包含json时,如果您清理数据库,只需再次运行loaddata命令即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。