/ / Použitie inicializačného háku SQL s ManytoManyField - python, sql, django

Použitie inicializačného háku SQL s ManytoManyField - python, sql, django

Pre Django som celkom nový a snažím sa pridať nejaké „hostiteľské“ údaje do „záznamu“ pomocou djangovho háku na inicializáciu pomocou SQL (súbor SQL malým písmom v priečinku aplikácie a podpriečinku sql)

Tu sú tieto modely:

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()

Použil som ManyToManyField, pretože každý záznam by mal mať viac hostiteľov a hostitelia by mali byť „opakovane použiteľní“: tj mali by byť schopní sa objaviť v mnohých záznamoch.

Keď sa snažím vložiť pomocou SQL, mám

INSERT INTO myapp_record VALUES ("Species name", "data1", XYZ);

Nie som si istý, čo mám dať do XYZ (ManytoMany), ak chcem napríklad hostiteľov 1, 2 a 3

Oddelenie čiarkami nefunguje, samozrejme,a snažil som sa tuple, a to ani neurobil. Mal by som sa pokúsiť vložiť do sprostredkovateľskej tabuľky, ktorú robí Django? Má to podobný háčik ako ten, ktorý používam? Ak nie, ako môžem vykonať príkazy SQL v tejto tabuľke?

odpovede:

0 pre odpoveď č. 1

Použitie počiatočných dátových súborov SQL je zastarané, Namiesto toho by ste mali používať migráciu údajov, ktorá môže vyzerať asi takto:

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