Django 2.0 использует ORM в скрипте Python в родительском каталоге папки django

timbram спросил: 13 июня 2018 в 07:50 в: python

У меня есть следующая структура для моего проекта:

.
├── py_file_i_want_to_use_core_models_in.py
├── web_app
    ├── core
    │   ├── __init__.py
    │   ├── __pycache__
    │   ├── admin.py
    │   ├── apps.py
    │   ├── core_settings.py
    │   ├── forms.py
    │   ├── migrations
    │   ├── models.py
    │   ├── static
    │   ├── templates
    │   ├── tests.py
    │   ├── urls.py
    │   └── views.py
    ├── web_app
    │   ├── __init__.py
    │   ├── __pycache__
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── manage.py

Я хочу получить доступ некоторые модели определяют в web_app/core/models.py внутри скрипта python py_file_i_want_to_use_core_models_in.py, но я не могу получить код, который я нахожу для работы:

Вот что я пытаюсь :

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web_app.web_app.settings")import django
django.setup()

Но этот импорт дает мне следующую ошибку:

ModuleNotFoundError: No module named 'core'

Любые идеи о том, как я может решить эту проблему?

2 ответа

Wariored ответил: 13 июня 2018 в 08:04

Я бы сделал:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web_app.settings")

Затем укажите "core" в INSTALLED_APPS

dmitryro ответил: 13 июня 2018 в 08:05

Создайте каталог с именем settings и разместите исходные настройки из файла core_settings.py там - еще лучше, создайте development_settings.py и default_settings.py out из этого для разработки, производства, постановки и т. д., поэтому ваша иерархия будет выглядеть как

 +core
 |
 +web_app+
 |       |
 |       +urls.py
 |       |
 |       +wsgi.py
 |
 +settings+
 |        |
 |        +settings.py
 |        |
 |        +default_settings.py
 |        |
 |        +development_settings.py
 + manage.py

Затем ваш web_app / wsgi.py должен выглядеть следующим образом:

import osfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.settings")application = get_wsgi_application()

Ваш manage.py:

#!/usr/bin/env python
import os
import sysif __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

Затем ваши настройки / settings.py

from .development_settings import *

Или

try:
    from development_settings import *
except ImportError:
    from default_settings import *

Я предполагаю, что Python 3 и Django 2.0

Это должно дать вам рабочую среду, когда вы используете manage.py, при условии, что все приложения находятся в INSTALLED_APPS ваших файлов настроек. Ваше исходное местоположение settings.py - в вашем случае core_settings.py) - это не то место, где оно должно быть - и если оно помещено там, затем wsgi.py и manage.py необходимо соответствующим образом обновить, но в качестве хорошей практики полезно сохранять настройки из определенного приложения.

Дополнительное видео по вопросу: Django 2.0 использует ORM в скрипте Python в родительском каталоге папки django

How Model Queries Work in Django

Python Django Tutorial: Full-Featured Web App Part 5 - Database and Migrations

Django Tutorial #8 - The Django ORM