models.py 을 여러 파일로 분할합니다.
나는 그것을 나누려고 노력하고 있습니다.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
이것은 작동하지 않습니다. 그리고 나서 저는 이것을 찾았습니다. 하지만 이 솔루션에서 저는 여전히 문제가 있습니다. 제가 실행할 때.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"
그래서, 제가 참조를 위해 수동으로 수정기를 실행해야 하나요?이것이 남쪽에 문제를 가져올 수 있습니까?
Django 1.9의 모든 사용자를 위해 클래스 메타 데이터를 정의하지 않고 프레임워크에서 지원됩니다.
https://docs.djangoproject.com/en/1.9/topics/db/models/ #패키지에 포함된 패키지 구성
참고: 장고 2의 경우, 여전히 동일합니다.
그
manage.py startapp
명령은 models.py 파일을 포함하는 응용 프로그램 구조를 만듭니다.모델이 많은 경우 별도의 파일로 구성하는 것이 유용할 수 있습니다.이렇게 하려면 모델 패키지를 생성합니다..py 을 .py 을 .
myapp/models/
가 " " " (" " " " " " " " 인 경우)로 됩니다.__init__.py
파일 및 모델을 저장할 파일.에모델가합야에 있는 합니다.__init__.py
java.
그래서, 당신의 경우에는, 다음과 같은 구조를 위해.
app1/
views.py
__init__.py
models/
__init__.py
model1.py
model2.py
app2/
views.py
__init__.py
models/
__init__.py
model3.py
model4.py
당신은 하기만 하면 됩니다.
#myproject/app1/models/__init__.py:
from .model1 import Model1
from .model2 import Model2
#myproject/app2/models/__init__.py:
from .model3 import Model3
from .model4 import Model4
모든 클래스 가져오기에 대한 참고 사항:
를 사용하지 않고 각 모델을
from .models import *
네임스페이스를 복잡하게 만들지 않고 코드를 더 쉽게 읽을 수 있게 하며 코드 분석 도구를 유용하게 유지할 수 있는 장점이 있습니다.
다음을 수행합니다.
myproject/
...
app1/
views.py
__init__.py
models.py
submodels/
__init__.py
model1.py
model2.py
app2/
views.py
__init__.py
models.py
submodels/
__init__.py
model3.py
model4.py
그리고나서
#myproject/app1/models.py:
from submodels/model1.py import *
from submodels/model2.py import *
#myproject/app2/models.py:
from submodels/model3.py import *
from submodels/model4.py import *
다만, 정당한 이유가 없다면 app1/models.py 에 model1과 model2를 직접 넣고 app2/models.py 에 model3와 model4를 넣어주세요.
---세컨드 파트---
다음은 app1/models/model1.py 파일입니다.
from django.db import models
class Store(models.Model):
class Meta:
app_label = "store"
따라서 model3.py 파일을 수정합니다.
from django.db import models
from app1.models import Store
class Product(models.Model):
store = models.ForeignKey(Store)
class Meta:
app_label = "product"
편집됨, 다른 사용자에게 이 메시지가 다시 표시되는 경우:이를 수행하는 프로젝트의 예를 보려면 django-schedjango-schedule.https://github.com/thauber/django-schedule/tree/master/schedule/models https://github.com/thauber/django-schedule/
질문하신 내용에 대한 튜토리얼을 실제로 발견했습니다. 여기에서 확인할 수 있습니다.
https://web.archive.org/web/20190331105757/http ://paltman.com/breaking-apart-models-in-django/
한 가지 중요한 점은 Meta 클래스의 db_table 필드를 사용하여 재배치된 클래스가 자신의 테이블을 다시 가리키도록 하는 것입니다.
이 접근 방식이 장고 1.3에서 작동하고 있음을 확인할 수 있습니다.
장고 3의 관련 링크는 다음과 같습니다.
https://docs.djangoproject.com/en/3.2/topics/db/models/ #패키지에 포함된 패키지 구성
이전 버전의 설명서에 대한 링크가 끊어졌습니다.여기에 있는 예는 매우 간결합니다.
이렇게 하려면 모델 패키지를 생성합니다.models.py 을 제거하고 init.py 파일과 모델을 저장할 파일이 있는 myapp/sys/ 디렉토리를 만듭니다.init.py 파일에 있는 모델을 가져와야 합니다.
예를 들어 모델 디렉토리에 organic.py 및 synthetic.py 이 있는 경우:
from .organic import Person
from .synthetic import Robot
가장 쉬운 단계:
- 앱에 모델 폴더 만들기(폴더 이름은 모델이어야 함)
- 앱 디렉터리에서 model.py 파일 삭제(삭제하는 동안 파일 백업)
- 그리고 모델 폴더에 init.py 파일을 만든 후
- 그리고 init.py 파일 뒤에 간단한 한 줄을 씁니다.
- 모델 폴더에 모델 파일을 생성한 후 모델 파일 이름은 클래스 이름과 같아야 하며, 클래스 이름이 '직원'인 경우 모델 파일 이름은 '직원'과 같아야 합니다.파이'
- 그리고 모델 파일 뒤에 데이터베이스 테이블을 model.py 파일과 동일하게 정의합니다.
- 구하라
내 코드 : from django_adminlte.models.employee importEmployee
의 경우: from app_name.models.model_file_name_only Import Class_Name_which_define_in_model_file
__init__.py
from django_adminlte.models.employee import Employee
model/employee.py (employee is separate model file)
from django.db import models
class Employee(models.Model):
eid = models.CharField(max_length=20)
ename = models.CharField(max_length=20)
eemail = models.EmailField()
econtact = models.CharField(max_length=15)
class Meta:
db_table = "employee"
# app_label = 'django_adminlte'
def __str__(self):
return self.ename
저는 유용할 수 있는 대본을 썼습니다.
github.com/victorqribeiro/splitDjangoModels
모델을 개별 파일로 분할하여 적절한 이름을 지정하고 가져오기만 하면 됩니다. 또한 init 파일을 만들어 모든 모델을 한 번에 가져올 수 있습니다.
이게 도움이 된다면 알려주세요.
언급URL : https://stackoverflow.com/questions/6336664/split-models-py-into-several-files
'sourcecode' 카테고리의 다른 글
텍스트 편집 시 Android에서 이메일 주소 확인 (0) | 2023.08.11 |
---|---|
mariadb 스토어드 프로시저에서 PHP 변수 설정; SQLSTATE [42S22]:열을 찾을 수 없음 (0) | 2023.08.11 |
서로 다른 호스트 간에 도커 컨테이너를 이동하는 방법은 무엇입니까? (0) | 2023.08.06 |
MySQL은 항상 BIT 값을 공백으로 반환합니다. (0) | 2023.08.06 |
mysql의 데이터 디렉토리를 이동하지 못함 (0) | 2023.08.06 |