【Django】如果一定要使用其他应用程序的表格,有一个应急方案
首先
由于花了一些时间来研究使用其他应用程序的表格的方法,因此我打算将其记录在文章中。
解决方法 (jiě jué àn)
有两种主要方法。
导入想要使用的表的模型并进行使用。
这次我要解释的是这种方法。
将应用程序进行整合
将希望共享表格的应用程序集成为一个应用程序。这是符合Django的基本原则的正确方式,即”各个应用程序不应该有依赖关系”。
简单来说,如果有A应用程序和B应用程序,B应用程序使用了在A应用程序上定义的表格,那么B应用程序只有在A应用程序存在的情况下才能成为一个有效的应用程序,因此可以说”B依赖于A”。
尽管如此,我认为有时候无法对已经在生产环境中运行的系统进行大规模的应用程序集成改造。本文将介绍在这种情况下可以使用的解决方案。
※如果还处于开发阶段或者修复问题没有来得及,强烈推荐方法2。
– 点数 shù)
– 分数 shù)
– 得分 (dé
– 评分
– 分值 zhí)
– 分点
如果使用PyCharm或者VSCode,会显示错误的检查提示(可能在其他IDE或编辑器中也会显示),请忽略它们。
Python有一个规则,即导入模块必须在当前目录或子目录中,但这种方法是违反规则的,以某种方式实现了导入。
说明 (jiě shuō)
我亲自制作了应用程序A和应用程序B,并从B中查看A的数据表。
※假设已经安装了Python。
通过以下命令创建Django应用程序。
> mkdir django-model-test
> cd django-model-test
django-model-test> python -m venv venv
django-model-test> venv\Scripts\activate # Windowsの場合
django-model-test> source venv/bin/activate # Mac,Linuxの場合
(venv) django-model-test> pip install django
(venv) django-model-test> mkdir Src
(venv) django-model-test> cd Src
(venv) django-model-test\Src> django-admin startproject config .
(venv) django-model-test\Src> python manage.py runserver

使用Ctrl+C停止测试服务器并继续进行。接下来执行以下命令。
django-model-test\Src> python manage.py startapp appA
django-model-test\Src> python manage.py startapp appB
在settings.py的INSTALLED_APPS中添加新的项目。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 追記
'appA.apps.AppaConfig',
'appB.apps.AppbConfig'
]
设置urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('appB/', include('appB.urls', namespace='appB'))
]
from django.urls import path
from . import views
app_name = 'appB'
urlpatterns = [
path('', views.top_page, name='top_page'),
]
]
创建 index.html(和保存的目录)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
参照成功!
</body>
</html>
在appA的models.py文件中创建一个用于测试的表格。
from django.db import models
class AppATable(models.Model):
sample = models.TextField()
从终端执行迁移操作。
django-model-test\Src> python manage.py makemigrations
django-model-test\Src> python manage.py migrate
请最后创建Views.py文件!可能会出现无法解析引用的错误,但请忽略它。
*请务必在进行迁移后再创建。
from django.shortcuts import render
from django.views.generic import View
from appA.models import AppATable
class TopPageView(View):
def get(self, request, *args, **kwargs):
appATable_data = AppATable.objects.all()
print(appATable_data.values())
return render(request, 'appB/index.html')
top_page = TopPageView.as_view()


以上就是结束了。
辛苦了。