我正在尝试将应用的models.py
拆分为多个文件:
我的第一个猜测是这样做:
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
这不起作用,然后我找到了this,但在这个解决方案中我仍然有一个问题,当我运行python manage.py sqlall app1
时,我得到了类似于:
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;
我不是很确定,但是我担心The following references should be added but depend on non-existent tables:
部分
这是我的model1.py文件:
from django.db import models
class Store(models.Model):
class Meta:
app_label = "store"
这是我的model3.py文件:
from django.db import models
from store.models import Store
class Product(models.Model):
store = models.ForeignKey(Store)
class Meta:
app_label = "product"
很明显,工作,但我得到的评论在alter table
,如果我尝试这样做,同样的事情发生:
class Product(models.Model):
store = models.ForeignKey('store.Store')
class Meta:
app_label = "product"
那么,我应该手动运行alter for references吗?这可能会给south带来问题?
6条答案
按热度按时间agyaoht71#
Django 3的相关链接是:
https://docs.djangoproject.com/en/3.2/topics/db/models/#organizing-models-in-a-package
到以前版本文档的链接已断开。下面的示例非常简洁:
为此,请创建一个models包。删除models.py并创建一个myapp/models/目录,其中包含一个init.py文件和用于存储模型的文件。您必须导入init.py文件中的模型。
例如,如果模型目录中有organic.py和synthetic.py:
m3eecexj2#
最简单的步骤:
1.在应用中创建模型文件夹(文件夹名称应为model)
1.从应用程序目录中删除www.example.com文件**(删除文件时备份文件)model.py file from app directory(Backup the file while you delete it)**
1.在模型文件夹中创建init. py文件后
1.并在init. py文件之后写入简单的一行
1.在模型文件夹中创建模型文件后,模型文件名应与类名相同,如果类名为"Employee",则模型文件名应与"employee.py"相同
1.之后在模型文件中定义您的数据库表,就像在model. py文件中一样
1.省省吧
我的代码:从django_adminlte. models. employee导入员工
对于您的:来自应用程序名称.模型。仅模型文件名称导入在模型文件中定义的类名称
jljoyd4f3#
我写了一个剧本可能会有用。
github.com/victorqribeiro/splitDjangoModels
将模型拆分为单独的文件,并进行适当的命名和导入;它还创建了一个init文件,这样您就可以一次导入所有模型。
如果有帮助就告诉我
ocebsuys4#
对于Django1.9上的任何人来说,现在框架都支持它,而不需要定义类元数据。
https://docs.djangoproject.com/en/1.9/topics/db/models/#organizing-models-in-a-package
manage.py startapp
命令可创建包含www.example.com文件的应用程序结构。如果您有许多模型,将它们组织在单独的文件中可能会很有用。models.py file. If you have many models, organizing them in separate files may be useful.为此,请创建一个models包。删除www.example.com并创建一个
myapp/models/
目录,其中包含__init__.py
文件和用于存储模型的文件。您必须导入__init__.py
文件中的模型。models.py and create amyapp/models/
directory with an__init__.py
file and the files to store your models. You must import the models in the__init__.py
file.所以,在你的例子中,对于这样的结构
你只需要
不要导入所有类的注意事项:
显式导入每个模型而不是使用
from .models import *
的好处是不会使名称空间混乱,使代码更可读,并保持代码分析工具的有用性。waxmsbnn5#
我会这样做:
然后
但是,如果没有充分的理由,可以直接将model 1和model 2放在app 1/ www.example.com中models.py,将model3和model 4放在app 2/models.py中
--第二部分--
这是app 1/子模型/model1.py文件:
因此,请更正您的model3.py文件:
编辑,以防有人再次出现这种情况:查看django-schedule,了解一个项目的例子,它可以做到这一点。https://github.com/thauber/django-schedule/tree/master/schedule/modelshttps://github.com/thauber/django-schedule/
ggazkfy86#
我实际上遇到了一个教程,正是你所问的,你可以在这里查看它:
https://web.archive.org/web/20190331105757/http://paltman.com/breaking-apart-models-in-django/
有一个关键点可能是相关的-您可能希望使用 meta类上的db_table字段将重新定位的类指向它们自己的表。
我可以确认这种方法在Django1.3中是有效的