python - 将 django models.py 拆分为文件夹内的多个文件(Django 3.0.4)
问题描述
我正在尝试将models.py拆分为文件夹内的多个文件。
这样做的正确方法是什么?
8年前互联网上的所有方法,现在都行不通了。
更新 1:
test1
__init__.py
admin.py
apps.py
tests.py
views.py
migrations
models
__init__.py
comment.py
like.py
post.py
profile.py
在初始化.py里面
from django.db import models
from django.conf import settings
from .like import Like
from .post import Post
from .profile import Profile
from .comment import Comment
里面的comment.py
class Comment(models.Model):
commented_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
for_post = models.ForeignKey(Post, on_delete=models.CASCADE)
里面like.py
class Like(models.Model):
liked_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
在post.py里面
class Post(models.Model):
posted_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
里面profile.py
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
当我尝试进行迁移时:
python manage.py makemigrations test1
我收到了这个错误:
(sandbox-qFsmxchL) λ python manage.py makemigrations test1
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "C:\Users\USER\.virtualenvs\sandbox-qFsmxchL\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
utility.execute()
File "C:\Users\USER\.virtualenvs\sandbox-qFsmxchL\lib\site-packages\django\core\management\__init__.py", line 377, in execute
django.setup()
File "C:\Users\USER\.virtualenvs\sandbox-qFsmxchL\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\USER\.virtualenvs\sandbox-qFsmxchL\lib\site-packages\django\apps\registry.py", line 114, in populate
app_config.import_models()
File "C:\Users\USER\.virtualenvs\sandbox-qFsmxchL\lib\site-packages\django\apps\config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "c:\users\USER\appdata\local\programs\python\python38-32\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:\Users\USER\Desktop\sandbox\test1\models\__init__.py", line 4, in <module>
from .like import Like
File "C:\Users\USER\Desktop\sandbox\test1\models\like.py", line 2, in <module>
class Like(models.Model):
NameError: name 'models' is not defined
解决方案
您可以将它们放入模型文件夹中,例如:
models/
- __init__.py
- model_1.py
- model_2.py
并__init__.py
应导入其他文件中包含的所有模型
from .model_1 import Model1
from .model_2 import Model2
取决于您是否有很多模型以及这些模型是否彼此严格相关,由您来拆分它们。
编辑:
在初始化.py里面
from .post import Post
from .like import Like
from .profile import Profile
from .comment import Comment
里面的comment.py
from django.db import models
from django.conf import settings
from test1.models import Post
class Comment(models.Model):
commented_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
for_post = models.ForeignKey(Post, on_delete=models.CASCADE)
里面like.py
from django.db import models
from django.conf import settings
from test1.models import Post
class Like(models.Model):
liked_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
在post.py里面
from django.db import models
from django.conf import settings
class Post(models.Model):
posted_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
里面profile.py
from django.db import models
from django.conf import settings
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
推荐阅读
- r - R DataTable 汇总更改
- c - 如何获得 qdisc 插件状态(缓冲或释放)?
- html - Kendo UI Sortable Connect With 不起作用
- javascript - 我正在尝试使用标记标记突出显示输出,但它不起作用
- android - 在 textview 上将矢量可绘制对象设置为背景的 Resourcenotfound 异常
- neutralinojs - Windows 模式下的问题@neutralinojs/neu@3.0.2
- python - 根据列表元素之间的距离将列表元素分割成子组
- python - 从 python 字符串中获取特定部分
- python - 无法打开旧的泡菜文件
- php - 将多个 SQL 查询合并为单个查询以提高速度