Python 在ManytoManyField中使用SQL初始化钩子

Python 在ManytoManyField中使用SQL初始化钩子,python,sql,django,Python,Sql,Django,我是Django的新手,我正在尝试使用Django的钩子将一些“主机”数据添加到“记录”中,以便使用SQL进行初始化(应用程序文件夹和SQL子文件夹中的一个小写SQL文件) 以下是模型: class Record(models.Model): species = models.TextField(max_length = 80) data=models.TextField(max_length = 700) hosts = models.ManyToManyField('

我是Django的新手,我正在尝试使用Django的钩子将一些“主机”数据添加到“记录”中,以便使用SQL进行初始化(应用程序文件夹和SQL子文件夹中的一个小写SQL文件)

以下是模型:

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(许多主机)应该放什么

用逗号分隔它们显然不起作用,我尝试了一个元组,但两者都没有。
我应该尝试插入到Django makes的中间表中吗?那个钩子和我用的钩子相似吗?如果没有,我如何在此表上执行SQL插入?

初始SQL数据文件的使用是无效的。相反,您应该使用数据迁移,它可能看起来像这样:

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),
    ]

如果我这样做,记录的初始化会(正确地)抱怨缺少一个值(主机字段)。我想我可以先允许hosts字段为null,然后将其添加到中介,但我觉得Django处理的要点是我不应该这样做。我还有几百行要手动完成,所以如果有任何方法可以在插入到记录的同时完成这项工作,这是我喜欢的,如果需要的话,我当然会做我必须做的事情。我希望你能理解,我很不愿意移动到Django的新版本(已经不到1周了)使用一个需要相对较大的任务和知识转移的系统来实现解决方案。由于目前在官方文档之外基本上没有新手支持,并且假设我想要的东西可以简单地用一些我没有的语法来完成,你一定会明白我为什么不这么做。