django模块'appname'没有属性'models' [英] django module 'appname' has no attribute 'models'
问题描述
直到我删除venv并使用pycharm重新创建venv之前,一切都运转良好.现在,无论我用django运行什么命令,它都会引发此错误:
Everything was working fine until today after I deleted venv and re-created it with pycharm. Now, whatever command I run with django, It throws up this error:
AttributeError: module 'api_backend' has no attribute 'models'
完整追溯:
(venv) C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger>python manage.py startapp test
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_f
rom_command_line
utility.execute()
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\venv\lib\site-packages\django\core\management\__init__.py", line 377, in execute
django.setup()
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\venv\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\venv\lib\site-packages\django\apps\registry.py", line 114, in populate
app_config.import_models()
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\venv\lib\site-packages\django\apps\config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "C:\Users\iyapp\AppData\Local\Programs\Python\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\api_backend\models\__init__.py", line 2, in <module>
from .data_sheets import *
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\api_backend\models\data_sheets.py", line 2, in <module>
from api_backend.managers.positions import PositionalManager
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\api_backend\managers\__init__.py", line 1, in <module>
from .field_data import FieldDataManager
File "C:\Users\iyapp\OneDrive\Desktop\python projects\DataSheet-ledger\api_backend\managers\field_data.py", line 3, in <module>
import api_backend.models as api_models
AttributeError: module 'api_backend' has no attribute 'models'
这就是我所做的-我删除了venv,再次创建并运行
This is what I did- I deleted the venv, created it again and ran
python -r requirements.txt
但是,我什么也不能做-不进行迁移或运行服务器.为什么会这样呢?是因为循环依赖项错误吗?
But then, I cannot do anything else- no migrations or running the server. Why is this so? Is it because of a circular dependency error?
project structure
以下是回溯中提到的文件:模型/初始 .py
Here are the files mentioned in traceback: models/init.py
from .data_sheets import *
from .roles import *
models/datasheets.py
from django.db import models
from api_backend.managers.positions import PositionalManager
from django.core.validators import MinLengthValidator
class DataSheetsCluster(models.Model):
objects = models.Manager()
id = models.BigAutoField(primary_key=True, db_index=True, editable=False, auto_created=True)
name = models.CharField(max_length=100, validators=[MinLengthValidator(2)], db_index=True)
created_at = models.DateTimeField(auto_now=True, editable=False, db_index=True)
REQUIRED_FIELDS = [name]
class DataSheetPositionManager(PositionalManager):
def __init__(self):
super().__init__()
self.POSITIONAL_MODEL = DataSheet
@classmethod
def get_overwrite_objects(cls, parent_object: DataSheetsCluster):
return parent_object.datasheets
经理/初始化 .py
managers/init.py
from .field_data import FieldDataManager
from .data_sheets import DataSheetsManager
from .roles import RolesManager
from .positions import PositionalManager
managers/field_data.py
from django.db import models, transaction
import api_backend.models as api_models
class FieldDataManager(models.Manager):
"""
A manager class to deal with Cluster Size Limits,
Field DataType Validation and JSON.dumping raw data.
"""
def __init__(self):
super().__init__()
...
def create_field_data(self, field, data: list, owner):
"""
Creates multiple record data objects with the given
Serializer data.
"""
transaction.set_autocommit(False)
try:
record_data = [self.create_field_data_object(owner=owner, parent=field, **record) for record in data]
created_records = api_models.FieldData.objects.bulk_create(record_data)
field.data.add(*created_records)
except Exception as err:
transaction.rollback()
raise ValueError(err)
else:
transaction.commit()
finally:
transaction.set_autocommit(True)
return created_records
有人可以帮助我解决此错误吗?例如,如果需要,我需要更换哪些型号?感谢您的宝贵时间!
can someone please help me fix this error? like what models do I need to shift if needed? thanks for spending your time!
推荐答案
这里的问题是循环依赖项错误.我通过重组项目解决了这个问题.所以现在,经理是我的models文件夹中的子文件夹.我的模型可以导入经理,但经理不能导入模型.
The problem here was the circular dependency errors. I solved this by restructuring my project. So now, managers was a sub-folder inside my models folder. My models can import managers, but managers cannot import models.
为此,我通过使用
self.model
然后,在模型内部,我提到这样的经理:
and then, inside the model, I mention the managers like this:
class SampleModel(models.Model):
objects = MyManager()
...
因此,要实际访问经理,我需要执行模型并做
So to actually access the manager, I take the model and do
model.objects
这样,我不需要直接从models文件夹中访问管理器.希望这可以节省很多人的时间.
this way, I dont need to access the managers directly out of the models folder. Hope this saves someone's time a lot.
@Jarvis回答的也是正确的,但从总体上看,重组我的项目是一个更好的解决方法.
what @Jarvis answered was also right, but at an overall view, restructuring my project was a better fix.
这篇关于django模块'appname'没有属性'models'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!