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
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
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),
]
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é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>
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 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>
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 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».
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