将django-models.py拆分为文件夹中的多个文件(django 3.0.4)



我正试图将模型.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

内部init.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)

内部配置文件.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:UsersUSER.virtualenvssandbox-qFsmxchLlibsite-packagesdjangocoremanagement__init__.py", line 401, in execute_from_command_line
utility.execute()
File "C:UsersUSER.virtualenvssandbox-qFsmxchLlibsite-packagesdjangocoremanagement__init__.py", line 377, in execute
django.setup()
File "C:UsersUSER.virtualenvssandbox-qFsmxchLlibsite-packagesdjango__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:UsersUSER.virtualenvssandbox-qFsmxchLlibsite-packagesdjangoappsregistry.py", line 114, in populate
app_config.import_models()
File "C:UsersUSER.virtualenvssandbox-qFsmxchLlibsite-packagesdjangoappsconfig.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "c:usersUSERappdatalocalprogramspythonpython38-32libimportlib__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:UsersUSERDesktopsandboxtest1models__init__.py", line 4, in <module>
from .like import Like
File "C:UsersUSERDesktopsandboxtest1modelslike.py", line 2, in <module>
class Like(models.Model):
NameError: name 'models' is not defined

您可以将它们放入模型文件夹中,例如:

models/
- __init__.py
- model_1.py
- model_2.py

并且CCD_ 1应该导入包含在其他文件中的所有模型

from .model_1 import Model1
from .model_2 import Model2

这取决于你是否有很多模型,以及这些模型是否彼此有密切的关系。

编辑:

内部init.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)

内部配置文件.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)