使用带有ManytoManyField的SQL初始化挂钩

时间:2014-09-07 08:55:42

标签: python sql django

我是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插入?

1 个答案:

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