/ / Korzystanie z haka inicjującego SQL z ManytoManyField - python, sql, django

Używanie haka inicjującego SQL z ManytoManyField - python, sql, django

Jestem dość nowy w Django i próbuję dodać trochę danych „hosta” do „zapisu” za pomocą haka django do użycia SQL do inicjalizacji (plik SQL małymi literami w folderze aplikacji i podfolderze sql)

Oto modele:

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

Użyłem ManyToManyField, ponieważ każdy rekord powinien mieć wiele hostów, a hosty powinny być „wielokrotnego użytku”: tzn. Być w stanie występować w wielu rekordach.

Kiedy próbuję wstawić przez SQL mam

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

Nie jestem pewien, co postawić dla XYZ (ManytoMany), jeśli chciałbym na przykład hostów 1, 2 i 3

Rozdzielanie ich przecinkami nie działa oczywiście,i spróbowałem krotkę i nie zrobiłem tego. Czy powinienem próbować wstawić do tabeli pośredniej, którą tworzy Django? Czy to ma podobny haczyk do tego, którego używam? Jeśli nie, jak mogę wykonać wstawianie SQL w tej tabeli?

Odpowiedzi:

0 dla odpowiedzi № 1

Wykorzystanie początkowych plików danych SQL jest przestarzałe. Zamiast tego powinieneś używać migracji danych, która może wyglądać mniej więcej tak:

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