Django休息框架目录结构

时间:2018-05-25 07:20:00

标签: python django django-rest-framework python-import

我是Django休息框架的新手,我正在将它们用于我们的一个项目。我当前的目录结构看起来像

project
     app
        __init__.py
        migrations
        utils
            __init__.py
            helpers.py
            utils.py
        core
            datastructures.py
        apps.py
        models.py
        serializers.py
        views.py
     project
        __init__.py
        settings.py
        urls.py
        wsgi.py
     manage.py

上面的utils目录包含访问和修改数据库的自定义代码,因此需要使用models.py中的模型。

核心目录包含app的逻辑,该逻辑将使用utils.pyhelpers.py中定义的函数。

所以我需要从helpers.py中的父目录导入一个文件。我尝试以下方式 -

    from ..models import model1,model2.....

预计这会将python 3中的经典导入错误称为ImportError: attempted relative import with no known parent package

我也试过了 -

     from project.app.models import model1,model2,...

这也会引发错误 -

   django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

鉴于以上所有内容(utils需要使用模型和核心需要使用utils),我觉得我很乱!

我应该遵循什么样的目录结构?这些导入将如何运作?

3 个答案:

答案 0 :(得分:0)

public class MyClass { Emp e=new Emp(); 的第二种方法是正确的。但是进口不应该在模块级别。

这是Django的做事方式。应用程序需要几秒钟才能连接到应用程序注册表,在此期间所有其他导入(如模型)都无效。因此,您应该直接导入函数中的模型,而不是模块级别。

答案 1 :(得分:0)

您是否在1 ---------------------------------------------------------------------------- SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. Explanation: One of the following conditions is true: * No row was found that meets the search conditions specified in an UPDATE or DELETE statement. * The result of a SELECT statement was an empty table. * A FETCH statement was executed when the cursor was positioned after the last row of the result table. * The result of the SELECT used in an INSERT statement is empty. No data was retrieved, updated, or deleted. User response: No action is required. Processing can continue. sqlcode: +100 sqlstate: 02000 1 record(s) selected. 注册了该应用?这应该在INSTALLED_APPS

中提供

来自Django's documentation

<强> apps.py

settings.py

<强> settings.py

from rock_n_roll.apps import RockNRollConfig

class JazzManoucheConfig(RockNRollConfig):
    verbose_name = "Jazz Manouche"

答案 2 :(得分:0)

解决utils对模型需求的一种方法是使用apps.get_model

from django.apps import apps

my_model = apps.get_model(app_label='app', model_name='MyModel')