[PYTHON] Tutoriel de clé externe de Django en 10 minutes

2020-04-01 Créé: windows10 / Python-3.8.2-amd64 / Django-3.0.4

Il n'y a pas beaucoup d'informations en japonais sur les clés externes de Django en ligne. Mais généralement, "plats préférés" et "carnet d'adresses" doivent être des applications différentes, Je pense que comment utiliser la clé externe est un élément obligatoire de base.

Pour les clés externes dans la même base de données et vers des bases de données externes J'ai créé un tutoriel simple. Pour ceux qui veulent facilement savoir comment corréler plusieurs bases de données entre elles.

Si vous êtes nouveau sur Django, veuillez d'abord lire le didacticiel de base. Tutoriel pratique sur Django en 10 minutes

Préparation

Créer un projet

Créez un nouveau projet en exécutant ce qui suit à l'endroit où vous souhaitez placer la source.

django-admin startproject mysite

Entrez dans le répertoire créé mysite et créez deux nouvelles applications.

cd mysite
python manage.py startapp cafe
python manage.py startapp sumika

La disposition des fichiers jusqu'à présent est comme ça

mysite/
    mysite/
        __pycashe__/    <-Ne vous inquiétez pas
        setting.py, urls.py etc.*.5 py
    neko/
        migrations/     <-Ne vous inquiétez pas
        models.py, views.py etc.*.6 py
    sumika/
        migrations/     <-Ne vous inquiétez pas
        models.py, views.py etc.*.6 py
    manage.py  

Enregistrement des applications qui composent le projet

Enregistrez deux applications, cafe et negura.

mysite/mysite/settings.py


INSTALLED_APPS = [
    'cafe.apps.CafeConfig',
    'negura.apps.NeguraConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

mysite/mysite/urls.py


from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('cafe/', include('cafe.urls')),
    path('negura/', include('negura.urls')),
    path('admin/', admin.site.urls),
]

Implémentation de l'application

Créer une application de café

Créer des modèles, des vues et des URL

neko_food est une clé externe dans la même base de données dans l'application café neko_negura est la clé externe de l'application negura, c'est-à-dire une autre base de données de l'application suivante.

La méthode def __str__ (self): est généralement nécessaire dans la vue générique de django lors de l'utilisation de ForeignKey. Si vous ne remplacez pas cette méthode, lorsqu'elle est affichée dans le navigateur Le nom de l'instance est affiché sous la forme food_name.object (1) au lieu de sanma. Grâce à cette méthode, la chaîne est affichée dans la liste déroulante lors de l'utilisation de CreateView ou FormView.

neko_negura extrait le modèle d'une application extérieure, donc Appelez le modèle après avoir préfixé le nom de l'application avec negura.NeguraModel.

mysite/cafe/models.py


from django.db import models
from negura.models import NeguraModel

class NekoModel(models.Model):
    neko_name = models.CharField(max_length = 20)
    neko_food = models.ForeignKey('FoodModel', null = True,on_delete = models.SET_NULL)
    neko_negura = models.ForeignKey('negura.NeguraModel', null = True,on_delete = models.SET_NULL)


class FoodModel(models.Model):
    food_name = models.CharField(max_length = 20)
    def __str__(self):
        return self.food_name

Ne vous méprenez pas sur la vue qui utilise quel modèle Il a un nom de fichier déroutant.

mysite/cafe/views.py


from django.views import generic
from .models import NekoModel, FoodModel

class NekoListView(generic.ListView):
    model = NekoModel
    context_object_name = 'nekolistview_context'
    template_name = 'cafe/nekolistview_template.html'

class NekoCreateView(generic.CreateView):
    model = NekoModel
    context_object_name = 'nekocreateview_context'
    template_name = 'cafe/nekocreateview_template.html'
    fields = ['neko_name', 'neko_food', 'neko_negura']
    success_url = '/cafe/nekolist_url'

class FoodListView(generic.ListView):
    model = FoodModel
    context_object_name = 'foodlistview_context'
    template_name = 'cafe/foodlistview_template.html'

urls.py crée un nouveau fichier Je lui ai donné un nom de merde pour ne pas me demander quel chemin d'accès pointe vers quelle vue.

mysite/cafe/urls.py


from django.urls import path
from . import views

urlpatterns = [
    path('nekolist_url', views.NekoListView.as_view(), name = 'nekolistview_path'),
    path('nekocreate_url', views.NekoCreateView.as_view(), name = 'nekocreateview_path'),
    path('foodlist_url', views.FoodListView.as_view(), name = 'foodlistview_path'),
]

Ne créez pas de vue pour saisir la nourriture ou l'adresse car le didacticiel prendra beaucoup de temps. Modifiez et activez admin.py pour la saisie à partir de l'écran d'administration à la place.

mysite/cafe/admin.py


from cafe.models import NekoModel, FoodModel
from django.contrib import admin

admin.site.register(NekoModel)
admin.site.register(FoodModel)

Créer un modèle

Créez 3 modèles. Je l'ai mis dans le répertoire par défaut, mais je ne l'aime pas vraiment car la hiérarchie est trop profonde.

mysite/cafe/template/cafe/nekolistview_template.html


<h1>Ichiran du chat</h1>
 <table>
  {% for neko_param in nekolistview_context %}
    <tr>
      <td>{{ neko_param.neko_name }}</td>
      <td>{{ neko_param.neko_food.food_name }}</td>
      <td>{{ neko_param.neko_negura.negura_name }}</td>
    </tr>
  {% endfor %}
</table>
<p><a href = "{% url 'foodlistview_path' %}">La nourriture pour chat</a></p>
<p><a href = "{% url 'neguralistview_path' %}">Niche de chat</a></p>
<p><a href = "{% url 'nekocreateview_path' %}">Chat</a></p>

mysite/cafe/template/cafe/foodlistview_template.html


<h1>La nourriture pour chat</h1>
<table>
  {% for food_param in foodlistview_context %}
    <tr>
      <td>{{ food_param.food_name }}</td>
    </tr>
  {% endfor %}
</table>
<p><a href = "{% url 'nekolistview_path' %}">Ichiran du chat</a></p>

mysite/cafe/template/cafe/nekocreateview.html


<h1>Chat</h1>
<form method = "post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type = "submit" value = "Toro" />
</form>
<p><a href = "{% url 'nekolistview_path' %}">Ichiran du chat</a></p>

Créer une appli Negura

Créer des modèles, des vues et des URL

En gros, c'est une répétition de ce que j'ai fait au café.

mysite/negura/models.py


from django.db import models

class NeguraModel(models.Model):
    negura_name = models.CharField(max_length = 20)
    def __str__(self):
        return self.negura_name

mysite/negura/views.py


from django.views import generic
from .models import NeguraModel

class NeguraListView(generic.ListView):
    model = NeguraModel
    context_object_name = 'neguralistview_context'
    template_name = 'negura/neguralistview_template.html'

mysite/negura/urls.py


from django.urls import path
from . import views

urlpatterns = [
    path('neguralist_url', views.NeguraListView.as_view(), name = 'neguralistview_path'),
]

mysite/negura/admin.py


from cafe.models import NeguraModel
from django.contrib import admin

admin.site.register(NeguraModel)

Créer un modèle

Créer un modèle L'emplacement est l'emplacement par défaut.

mysite/negura/template/negura/neguralistview_template.html


<h1>Niche de chat</h1>
<table>
  {% for negura_param in neguralistview_context %}
    <tr>
      <td>{{ negura_param.negura_name }}</td>
    </tr>
  {% endfor %}
</table>
<p><a href = "{% url 'nekolistview_path' %}">Ichiran du chat</a></p>

terminer

Paramètres de migration et d'administration

Après la migration, créez un administrateur pour le site d'administration et Rendez l'écran d'administration accessible.

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

Démarrez le serveur HTTP et entrez les données initiales

Démarrez le serveur de développement. Le numéro de port est 8000 car il est démarré par défaut.

python manage.py runserver

Accédez aux éléments suivants avec un navigateur pour afficher l'écran d'administration. "Eat" et "Sumika" ne peuvent pas être entrés directement dans cette application, alors entrez-les à partir de l'écran d'administration.

http://localhost:8000/admin/

Par exemple, la nourriture est «Sanma» et «Crispy», et Sumika est «Danboru» et «Moufu».

Contrôle de fonctionnement

Entrez ce qui suit pour obtenir une liste de chats. Au début, il n'y a pas de chats enregistrés, donc ils ne sont pas sur la table.

http://localhost:8000/neko/

Lorsque vous entrez dans l'écran d'inscription à partir du lien "Cat Touroku", Entrez le nom du chat dans le formulaire et "Nourriture" et "Negura" peuvent être sélectionnés dans la liste déroulante.

La fin

Recommended Posts

Tutoriel de clé externe de Django en 10 minutes
Ecrire des contraintes de clé externe dans Django
Argument Django Foreign Key on_delete
Clé étrangère dans SQLite de Python [Note]
Déployez Django en 3 minutes à l'aide de docker-compose
Environnement CSS créé en 10 minutes avec Django
Modèle dans Django
Tutoriel Python Django (5)
Tutoriel Python Django (2)
mémo du didacticiel django
Créez un environnement Django avec Vagrant en 5 minutes
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Démarrer le didacticiel Django 1
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Formulaire à Django
Tutoriel Python Django (3)
Tutoriel Python Django (4)
Séquence de touches en Python
Résumé du didacticiel Python Django
Apprenez les pandas en 10 minutes
Didacticiel sur les associations polymorphes Django
Génération de clé de session Django 1.4.2
tutoriel simple django oscar
Modifications du modèle dans Django
Comprendre en 10 minutes le sélénium
Le sélénium fonctionne en 15 minutes
Note du didacticiel Django Girls
Séquence de touches en Python