我是Django的新手,我正在尝试使用django的钩子将一些'主机'数据添加到'记录',以便使用SQL初始化(app文件夹和sql子文件夹中的小写SQL文件)< / p>
以下是模型:
class Record(models.Model):
species = models.TextField(max_length = 80)
data=models.TextField(max_length = 700)
hosts = models.ManyToManyField('Host')
class Host(models.Model):
hostname = models.TextField()
我使用了ManyToManyField,因为每条记录应该能够拥有多个主机,并且主机应该是“可重用的”:即能够出现在许多记录中。
当我尝试通过SQL插入时,我有
INSERT INTO myapp_record VALUES ('Species name', 'data1', XYZ);
如果我想要主机1,2和3,我不确定要为XYZ(ManytoMany)放置什么
用逗号分隔它们显然不起作用,我尝试了一个元组,但都没有这样做。 我应该尝试插入Django制作的中间表吗?这与我正在使用的那个有类似的钩子吗?如果没有,我如何在此表上执行SQL插入?
答案 0 :(得分:0)
初始SQL数据文件的使用是deprecated。相反,您应该使用数据迁移,可能如下所示:
from django.db import models, migrations
def create_records(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Record = apps.get_model("yourappname", "Record")
Host = apps.get_model("yourappname", "Host")
host1 = Host.objects.get(hostname='host1')
record = Record.objects.create(name='Species name', data='Data')
record.hosts.add(host1)
...etc...
class Migration(migrations.Migration):
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(create_records),
]