将Django模型类导入Plotly-Dash无状态应用程序中
将Django模型类导入Plotly-Dash无状态应用程序中
我正在尝试使用django-plotly-dash构建一个仪表盘应用。当从一个.CSV文件中提取数据时,我能够使应用程序正常运行,但速度较慢。为了加快速度,我将数据导入到后端的Postgresql服务器中,并在我的Django项目的pages应用程序中创建了一个模型。问题出现在当我尝试从模型中导入特定的表格到不同文件夹中的无状态DjangoDash应用程序时。我一直收到的错误是"无法导入pages.models"。
文件夹结构:
DjangoProject
>dash_apps
>finished_apps
-appOne.py
>pages
-__init__.py
-admin.py
-apps.py
-models.py
-test.py
>base
-__init__.py
-asgi.py
-routing.py
-settings.py
-urls.py
-wsgi.py
>templates
>pages
-index.html
-manage.py
该应用程序名为"appOne.py",表格或类位于"models.py"文件中,名为"general_finance_metrics"。
到目前为止,我在"appOne.py"文件中尝试了以下方法,但都没有成功:
from pages.models import general_finance_metrics (错误: 无法导入'pages.models' pylint (import-error))
from DjangoProject.pages.models import general_finance_metrics (错误: 无法导入'DjangoProject.pages.models' pylint (import-error))
from .models import general_finance_metrics (错误: 尝试相对导入超出顶级包 pylint (relative-beyond-top-level))
from base.models import general_finance_metrics (错误: 无法导入'base.models' pylint (import-error))
from base import models (错误: 无法导入'base' pylint (import-error))
from pages import models (错误: 无法导入'pages' pylint (import-error))
我查阅了这些其他问题,但没有找到有效的答案,除非我忽略了它,但我相信我的情况与这些问题不同,因为DASH应用程序不在单个应用程序中,而是在DjangoProject中。
appOne.py 代码:
import numpy as np
import pandas as pd
import datetime
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objs as go
from django_plotly_dash import DjangoDash
from django.db import models
from pages.models import general_finance_metrics # 错误发生在这里
df = pd.DataFrame(general_finance_metrics.objects.all().values())
models.py 代码:
class general_finance_metrics(models.Model):
columnOne = models.TextField(blank=True, null=True)
columnTwo = models.TextField(blank=True, null=True)
columnThree = models.TextField(blank=True, null=True)
def __str__(self):
return self.columnOne
admin.py 代码:
from django.contrib import admin
from .models import general_finance_metrics
urls.py 代码:
from django.urls import path
from dash_apps.finished_apps import appOne
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
index.html 代码:
{% load plotly_dash %}
{% plotly_app name='appOne' ratio=0.95 %}
问题的原因是在使用django-plotly-dash包时,无法从Django模型导入数据到dash应用程序中,只能从.csv文件中获取数据。作者希望能够通过Django模型从Postgres服务器中获取数据,但是目前的方法导致dash应用程序在每次刷新页面时都要重新加载csv文件,导致速度非常慢。
解决方法是调查为什么无法在dash应用程序中使用ORM。这是django-plotly-dash存在的主要原因之一。Dash回调是在Django视图内调用的,因此您应该能够使用类似于MyModel.objects.filter(things_derived_from_callback_arguments)
的语句。
另外,检查一下appOne.py文件是如何被Django导入的。在urls.py文件中使用from dash_apps.finished_apps import appOne
进行导入,并在HTML的主体中调用它。
同时,作者还尝试了在urls.py文件中导入其他文件,发现可以成功导入pages.models,但是dash_apps文件夹位于pages文件夹的外部。
最后,作者尝试在dash_apps文件夹和finished_apps文件夹中分别添加了一个__init__.py文件,发现在两者都没有__init__.py文件时会出现上述错误。
根据以上信息,可以得出解决方法为:调查为什么无法在dash应用程序中使用ORM,并确保dash_apps文件夹和finished_apps文件夹中都添加了__init__.py文件。
至此,问题的原因和解决方法已经整理完毕。