2012-12-05 6 views
8

Derzeit sind alle meine Modelle in models.py sind. Wird sehr chaotisch. Kann ich die separate Datei wie base_models.py, so dass ich dort meine wichtigsten Modelle setzen, die ich will nichtKann ich teilen die Modelle in verschiedenen Dateien in django

auch gleichen Fall für Ansichten und setzte in separaten Ordnern berühren, anstatt eine neue App entwickelt

Antwort

10

Ja es ist machbar. Es ist nicht besonders, obwohl recht:

Modelle ein Modul bilden, also die Verzeichnisstruktur wie folgt aussieht:

- models 
|- __init__.py 
|- some_model.py 
|- some_other_model.py 
|- ... 

jetzt, die Magie in __init__.py liegt und einige kleine Extras in den Modellen. __init__.py:

from some_model import SomeModel 
from some_other_model import SomeOtherModel 

__all__ = [ 
    'SomeModel', 
    'SomeOtherModel', 
] 

some_model.py:

class SomeModel(models.Model): 
    class Meta(object): 
     app_label = 'yourapplabel' 
     db_table = 'yourapplabel_somemodel' 
+0

dank für die Unterstrichen acjohnson55, Es war ein wenig früh am Morgen – tback

0

Ja, nur einen Ordner models und in diesem Ordner setzte alle Ihre getrennten Modelldateien genannt werden. Sie müssen eine Datei mit der Bezeichnung __init__.py in den Ordner models einfügen, damit sie als models-Modul betrachtet werden kann. In __init__.py verwenden from ... import ... die Namen setzen Sie direkt in yourapp.models verfügbar sein soll, sonst wird man sie als yourapp.models.base_model importieren müssen, oder was auch immer Submodul Namen, den Sie verwenden.

Außerdem müssen Sie in jedem Modell ein Meta-Attribut mit dem Namen app_label = 'yourapp' hinzufügen, um sicherzustellen, dass Ihre Modelle als Teil der App erkannt werden.

0

Sie die Modell-Datei wie folgt trennen:
------- Modelle/
--------- ----- init Py
-------------- usermodels.py
--------------othermodel.py

im init Py:
--------------- von usermodels import *
--------------- von othermodel import *
und in den * Modellen. py, fügen Sie META-Klasse:
-------- Meta-Klasse:
-------------- app_label = 'appName'

Verwandte Themen