Ich versuche das zu teilen models.py
meine App in mehrere Dateien :
Meine erste Vermutung war, dies zu tun:
myproject/
settings.py
manage.py
urls.py
__init__.py
app1/
views.py
__init__.py
models/
__init__.py
model1.py
model2.py
app2/
views.py
__init__.py
models/
__init__.py
model3.py
model4.py
Das funktioniert nicht, dann fand ich diese , aber in dieser Lösung , die ich habe immer noch ein Problem, wenn ich laufe python manage.py sqlall app1
Ich habe so etwas wie:
BEGIN;
CREATE TABLE "product_product" (
"id" serial NOT NULL PRIMARY KEY,
"store_id" integer NOT NULL
)
;
-- The following references should be added but depend on non-existent tables:
-- ALTER TABLE "product_product" ADD CONSTRAINT "store_id_refs_id_3e117eef" FOREIGN KEY ("store_id") REFERENCES "store_store" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "product_product_store_id" ON "product_product" ("store_id");
COMMIT;
Ich bin mir da nicht ganz sicher, aber ich mache mir Sorgen um den Teil The following references should be added but depend on non-existent tables:
Dies ist meine model1.py-Datei:
from django.db import models
class Store(models.Model):
class Meta:
app_label = "store"
Dies ist meine model3.py-Datei:
from django.db import models
from store.models import Store
class Product(models.Model):
store = models.ForeignKey(Store)
class Meta:
app_label = "product"
Und anscheinend funktioniert es, aber ich habe den Kommentar erhalten alter table
und wenn ich das versuche, passiert dasselbe:
class Product(models.Model):
store = models.ForeignKey('store.Store')
class Meta:
app_label = "product"
Sollte ich die Änderung für Referenzen manuell ausführen? das kann mir Probleme mit dem Süden bringen?
python
django
django-models
import
diegueus9
quelle
quelle
from app1.models.model1 import Store
?Antworten:
Ich würde folgendes tun:
Dann
Wenn Sie jedoch keinen guten Grund haben, fügen Sie model1 und model2 direkt in app1 / models.py und model3 und model4 in app2 / models.py ein
---zweiter Teil---
Dies ist die Datei app1 / submodels / model1.py:
Korrigieren Sie daher Ihre model3.py-Datei:
Bearbeitet, falls dies für jemanden erneut auftritt: Schauen Sie sich den Django-Zeitplan an, um ein Beispiel für ein Projekt zu finden, das genau dies tut. https://github.com/thauber/django-schedule/tree/master/schedule/models https://github.com/thauber/django-schedule/
quelle
from product.models import Product
: ImportError: Kein Modul namens modelsmodels.py
Datei zu reduzieren . Ich habe dies kürzlich getan, als meine auf über 15.000 Codezeilen angewachsen ist. Tolles Schreiben. Der Prozess ist ziemlich einfach. Die wichtigste Einschränkung ist, dass Sie daran denken müssen, ein explizites app_label zu definieren, da Django dies standardmäßig aus dem unmittelbaren Modul extrahiert.__init__.py
und alles scheint in Ordnung zu sein. Ich musste meine Modelldateien nicht korrigieren. Ich kann Objekte aus der Shell und dem Django-Administrator abrufen und erstellen. Ich habe Django seit ungefähr einer Woche ausprobiert, also frage ich mich, ob die neueste Version dies jetzt zulässt.Für alle Benutzer von Django 1.9 wird es jetzt vom Framework unterstützt, ohne die Klassen-Metadaten zu definieren.
https://docs.djangoproject.com/de/1.9/topics/db/models/#organizing-models-in-a-package
HINWEIS: Für Django 2 ist es immer noch dasselbe
Also in Ihrem Fall für eine Struktur wie
Sie müssen nur tun
Ein Hinweis gegen den Import aller Klassen:
quelle
models.py
und später migrieren möchten. In diesem Fall müssen Sie Ihre Migrationen und Ihre Datenbank löschen: / Oder um alle Fehler in allen Migrationsdateien manuell zu behebenIch habe tatsächlich ein Tutorial für genau das gefunden, wonach Sie fragen. Sie können es hier ansehen:
http://paltman.com/breaking-apart-models-in-django/
Ein wichtiger Punkt, der wahrscheinlich relevant ist: Möglicherweise möchten Sie das Feld db_table in der Meta-Klasse verwenden, um die verschobenen Klassen wieder auf ihre eigene Tabelle zu verweisen.
Ich kann bestätigen, dass dieser Ansatz in Django 1.3 funktioniert
quelle
Einfachste Schritte:
quelle
RuntimeError ModelX doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
in Django 2.x verursachen .Ich habe ein Skript geschrieben, das nützlich sein könnte.
github.com/victorqribeiro/splitDjangoModels
Es teilt die Modelle in einzelne Dateien mit der richtigen Benennung und dem richtigen Import auf. Außerdem wird eine Init-Datei erstellt, sodass Sie alle Ihre Modelle gleichzeitig importieren können.
Lassen Sie mich wissen, ob das hilft
quelle