[Django] Expliquez soigneusement la voie d'échappement si vous voulez vraiment utiliser la table d'une autre application

introduction

Il m'a fallu un certain temps pour savoir comment utiliser le tableau d'une autre application, je vais donc l'écrire sous forme d'article.

Solution

Il existe deux manières principales de le faire.

1. 1. Importez et utilisez le modèle de la table que vous souhaitez utiliser

Cette méthode est expliquée cette fois.

2. Intégrez des applications

Intégrer les applications qui souhaitent partager une table en une seule application. Selon l'idée de base de Django, "Chaque application ne doit pas avoir de dépendance", ** C'est une approche simple ** </ font>.

En termes simples, lorsqu'il existe des applications A </ font> et B </ font>, elles sont définies sur l'application A </ font>. Le fait que B </ font> utilise la table créée signifie que B </ font> a A </ font>. En effet, ce sera la première application à fonctionner = ** " B </ font> dépend de A </ font>" **.

** Cela dit, ** Je pense qu'il y a des moments où vous ne pouvez pas apporter de modifications majeures pour intégrer des applications dans un système qui fonctionne déjà en production. Dans cet article, je vais vous présenter une voie de sortie qui peut être utilisée dans de tels cas.

  • S'il est encore en développement ou s'il n'est pas trop tard pour le réparer ** La méthode 2 est fortement recommandée **.

point

Si vous utilisez PyCharm ou VSCode, vous verrez une inspection de l'erreur (probablement dans d'autres IDE et éditeurs) ** Ignorez-le **. Python a une règle selon laquelle ** la source d'importation doit être dans la même couche ou la couche inférieure **, mais c'est une méthode d'importation d'une manière qui enfreint les règles.

Commentaire

Créez en fait une application A </ font> et une application B </ font>, et de B </ font> à A A < Allez voir le tableau / font>.

  • En principe, on suppose que Python est déjà installé. Créez une application Django avec la commande suivante
> mkdir django-model-test
> cd django-model-test
django-model-test> python -m venv venv
django-model-test> venv\Scripts\activate  #Pour les fenêtres
django-model-test> source venv/bin/activate  # Mac,Pour 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

Si vous accédez à localhost: 8000 et que l'écran de démonstration de Django s'affiche, c'est OK. image.png

Quittez le serveur de test avec Ctrl + C et continuez. Exécutez la commande suivante

django-model-test\Src> python manage.py startapp appA
django-model-test\Src> python manage.py startapp appB

Ajouté à INSTALLED_APPS dans settings.py

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',
    #Postscript
    'appA.apps.AppaConfig',
    'appB.apps.AppbConfig'
]

Définir urls.py

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'),
    ]
]

Créer index.html (et répertoire de destination)

django-model-test\Src\appB\templates\appB\index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Succès de référence!
</body>
</html>

Créez une table de test dans models.py de appA

django-model-test\Src\appA\models.py


from django.db import models


class AppATable(models.Model):

    sample = models.TextField()

Exécutez la migration depuis le terminal

django-model-test\Src> python manage.py makemigrations
django-model-test\Src> python manage.py migrate

Enfin, créez l'essentiel Views.py! La troisième ligne ne peut probablement pas être référencée et une erreur se produira, mais veuillez l'ignorer.

  • Veuillez vous assurer de migrer avant de créer

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()

Mettez les données de test dans le DB. Cette fois, je l'ai fait à partir de l'EDI, mais si vous n'avez pas l'outil, vous pouvez le saisir depuis le site de gestion de Django. image.png

C'est tout pour la préparation. Démarrez le serveur de test et accédez à [localhost: 8000 / appB]. C'est OK si le texte "Référence réussie!" Est affiché sur le navigateur et le résultat de l'instruction d'impression (contenu de appATable) est affiché depuis le terminal. image.png image.png

C'est tout. Merci pour votre travail acharné: cat2:

Recommended Posts