<转>将Django models 和views拆分程多个文件

原文链接:http://cutso.blog.sohu.com/149064383.html


大多数Django教程都是将models放在models.py文件(模块)中, 然而随着models类的增加, 将类放在一个文件中太混乱了, 于是将models做成一个package: 

[python]  view plain  copy
  1. models/   
  2.     __init__.py   
  3.     usermodels.py   
  4.     othermodel.py   

这样就可以将models定义拆分到多个模块中,  但是当用命令同步数据时发现不可用: 

$Python manage.py sqlall blog 

不会生成数据库创建命令(APP的名字是blog) ,需要做如下更改:

在__init__.py中import模块: 
[python]  view plain  copy
  1. from usermodels import *   
  2. from othermodel import *   

在定义model的类中加一个内部类Meta: 

[python]  view plain  copy
  1. class User(models.Model):   
  2.     title = models.CharField(max_length = 100)   
  3.     class Meta:   
  4.         app_label = 'blog'   

app_lable的值为APP的名称,这样就可以将models定义到多个文件中了。
Traceback (most recent call last): File "C:\Python310\lib\threading.py", line 1009, in _bootstrap_inner self.run() File "C:\Python310\lib\threading.py", line 946, in run self._target(*self._args, **self._kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\management\commands\runserver.py", line 124, in inner_run autoreload.raise_last_exception() File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\autoreload.py", line 86, in raise_last_exception raise _exception[1] File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\management\__init__.py", line 394, in execute autoreload.check_errors(django.setup)() File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\apps\registry.py", line 116, in populate app_config.import_models() File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\apps\config.py", line 269, in import_models self.models_module = import_module(models_module_name) File "C:\Python310\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\apps\question\models\__init__.py", line 1, in <module> from .category import TblQuestionCategory File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\apps\question\models\category.py", line 4, in <module> class TblQuestionCategory(models.Model): File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\db\models\base.py", line 368, in __new__ new_class._meta.apps.register_model(new_class._meta.app_label, new_class) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\apps\registry.py", line 234, in register_model raise RuntimeError( RuntimeError: Conflicting 'tblquestioncategory' models in application 'question': <class 'apps.question.models.category.TblQuestionCategory'> and <class 'question.models.category.TblQuestionCategory'>. (.venv) PS D:\pythonSpace\django-vue3.2-online-exam-master\backend> pip remove question ERROR: unknown command "remove" (.venv) PS D:\pythonSpace\django-vue3.2-online-exam-master\backend> pip uninstall question WARNING: Skipping question as it is not installed. (.venv) PS D:\pythonSpace\django-vue3.2-online-exam-master\backend> python manage.py runserver Watching for file changes with StatReloader Exception in thread django-main-thread: Traceback (most recent call last): File "C:\Python310\lib\threading.py", line 1009, in _bootstrap_inner self.run() File "C:\Python310\lib\threading.py", line 946, in run self._target(*self._args, **self._kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\management\commands\runserver.py", line 124, in inner_run autoreload.raise_last_exception() File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\autoreload.py", line 86, in raise_last_exception raise _exception[1] File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\management\__init__.py", line 394, in execute autoreload.check_errors(django.setup)() File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\apps\registry.py", line 116, in populate app_config.import_models() File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\apps\config.py", line 269, in import_models self.models_module = import_module(models_module_name) File "C:\Python310\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\apps\question\models\__init__.py", line 1, in <module> from .category import TblQuestionCategory File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\apps\question\models\category.py", line 4, in <module> class TblQuestionCategory(models.Model): File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\db\models\base.py", line 368, in __new__ new_class._meta.apps.register_model(new_class._meta.app_label, new_class) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\apps\registry.py", line 234, in register_model raise RuntimeError( RuntimeError: Conflicting 'tblquestioncategory' models in application 'question': <class 'apps.question.models.category.TblQuestionCategory'> and <class 'question.models.category.TblQuestionCategory'>. (.venv) PS D:\pythonSpace\django-vue3.2-online-exam-master\backend> grep -r "class tblquestioncategory" ./question/ grep : 无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 + grep -r "class tblquestioncategory" ./question/ + ~~~~ + CategoryInfo : ObjectNotFound: (grep:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException (.venv) PS D:\pythonSpace\django-vue3.2-online-exam-master\backend> python manage.py runserver Watching for file changes with StatReloader Performing system checks... Exception in thread django-main-thread: Traceback (most recent call last): File "C:\Python310\lib\threading.py", line 1009, in _bootstrap_inner self.run() File "C:\Python310\lib\threading.py", line 946, in run self._target(*self._args, **self._kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\management\commands\runserver.py", line 134, in inner_run self.check(**check_kwargs) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\management\base.py", line 492, in check all_issues = checks.run_checks( File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\checks\registry.py", line 89, in run_checks new_errors = check(app_configs=app_configs, databases=databases) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\checks\urls.py", line 16, in check_url_config return check_resolver(resolver) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\core\checks\urls.py", line 26, in check_resolver return check_method() File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\urls\resolvers.py", line 531, in check for pattern in self.url_patterns: File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\functional.py", line 47, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\urls\resolvers.py", line 718, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\functional.py", line 47, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\urls\resolvers.py", line 711, in urlconf_module return import_module(self.urlconf_name) File "C:\Python310\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\backend\urls.py", line 20, in <module> from drf_spectacular.views import SpectacularJSONAPIView, SpectacularRedocView, SpectacularSwaggerView File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\drf_spectacular\views.py", line 15, in <module> from rest_framework.views import APIView File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\rest_framework\views.py", line 18, in <module> from rest_framework.schemas import DefaultSchema File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\rest_framework\schemas\__init__.py", line 33, in <module> authentication_classes=api_settings.DEFAULT_AUTHENTICATION_CLASSES, File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\rest_framework\settings.py", line 227, in __getattr__ val = perform_import(val, attr) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\rest_framework\settings.py", line 170, in perform_import return [import_from_string(item, setting_name) for item in val] File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\rest_framework\settings.py", line 170, in <listcomp> return [import_from_string(item, setting_name) for item in val] File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\rest_framework\settings.py", line 179, in import_from_string return import_string(val) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\module_loading.py", line 30, in import_string return cached_import(module_path, class_name) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\django\utils\module_loading.py", line 15, in cached_import module = import_module(module_path) File "C:\Python310\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\utils\auth\authentication.py", line 15, in <module> from utils.auth.jwt_util import JwtUtil File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\utils\auth\jwt_util.py", line 9, in <module> from jose import jwt File "D:\pythonSpace\django-vue3.2-online-exam-master\backend\.venv\lib\site-packages\jose.py", line 546 print decrypt(deserialize_compact(jwt), {'k':key}, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
最新发布
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值