Ich habe eine Weile gebraucht, um herauszufinden, wie man die Tabelle einer anderen App verwendet, also werde ich sie als Artikel schreiben.
Es gibt zwei Möglichkeiten, dies zu tun.
Diese Methode wird diesmal erklärt.
Integrieren Sie Apps, die eine Tabelle als eine App freigeben möchten. Nach Djangos Grundidee "Jede App sollte keine Abhängigkeit haben", ** Dies ist ein unkomplizierter Ansatz ** </ font>.
Einfach ausgedrückt, wenn es Apps A </ font> und B </ font> gibt, werden diese in der App A </ font> definiert. Die Tatsache, dass B </ font> die erstellte Tabelle verwendet, bedeutet, dass B </ font> A </ font> hat. Dies liegt daran, dass es die erste App ist, die funktioniert = ** " B </ font> hängt von A </ font>" ** ab.
** Das heißt, ** Ich denke, es gibt Zeiten, in denen Sie keine größeren Änderungen vornehmen können, um Apps in ein System zu integrieren, das bereits in der Produktion läuft. In diesem Artikel werde ich einen Fluchtweg vorstellen, der in solchen Fällen verwendet werden kann.
Wenn Sie PyCharm oder VSCode verwenden, wird der Fehler überprüft (wahrscheinlich in anderen IDEs und Editoren). ** Ignorieren **. Python hat die Regel, dass sich die ** Importquelle in derselben oder einer niedrigeren Ebene befinden muss **, aber es ist eine Methode, um auf eine Weise zu importieren, die gegen die Regeln verstößt.
Erstellen Sie tatsächlich eine App A </ font> und eine App B </ font> und von B </ font> zu A A < Schauen Sie sich die Tabelle / font> an.
> mkdir django-model-test
> cd django-model-test
django-model-test> python -m venv venv
django-model-test> venv\Scripts\activate #Für Windows
django-model-test> source venv/bin/activate # Mac,Für 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
Wenn Sie auf localhost: 8000 zugreifen und der Django-Demobildschirm angezeigt wird, ist dies in Ordnung.
Beenden Sie den Testserver mit Strg + C und fahren Sie fort. Führen Sie den folgenden Befehl aus
django-model-test\Src> python manage.py startapp appA
django-model-test\Src> python manage.py startapp appB
Zu INSTALLED_APPS in settings.py hinzugefügt
django-model-test\Src\config\settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#Nachtrag
'appA.apps.AppaConfig',
'appB.apps.AppbConfig'
]
Stellen Sie urls.py ein
django-model-test\Src\config\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'))
]
django-model-test\Src\appB\urls.py
from django.urls import path
from . import views
app_name = 'appB'
urlpatterns = [
path('', views.top_page, name='top_page'),
]
]
Erstellen Sie index.html (und das Zielverzeichnis).
django-model-test\Src\appB\templates\appB\index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Referenzerfolg!
</body>
</html>
Erstellen Sie eine Testtabelle in models.py von appA
django-model-test\Src\appA\models.py
from django.db import models
class AppATable(models.Model):
sample = models.TextField()
Führen Sie die Migration vom Terminal aus
django-model-test\Src> python manage.py makemigrations
django-model-test\Src> python manage.py migrate
Erstellen Sie zum Schluss die wesentlichen Views.py! Wahrscheinlich kann nicht auf die dritte Zeile verwiesen werden und es tritt ein Fehler auf, aber bitte ignorieren Sie ihn.
django-model-test\Src\appB\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()
Legen Sie die Testdaten in die DB. Diesmal habe ich es über die IDE gemacht, aber wenn Sie das Tool nicht haben, können Sie es über die Django-Verwaltungssite eingeben.
Das ist alles zur Vorbereitung. Starten Sie den Testserver und greifen Sie auf [localhost: 8000 / appB] zu. Es ist in Ordnung, wenn der Text "Referenz erfolgreich!" Im Browser angezeigt wird und das Ergebnis der Druckanweisung (Inhalt von appATable) vom Terminal angezeigt wird.
Das ist alles. Vielen Dank für Ihre harte Arbeit: cat2: