2020-04-01 Erstellt: windows10 / Python-3.8.2-amd64 / Django-3.0.4
Auf Japanisch gibt es nicht viele Informationen über Djangos externe Schlüssel online. Aber normalerweise sollten "Lieblingsessen" und "Adressbuch" unterschiedliche Apps sein. Ich denke, dass die Verwendung des externen Schlüssels ein grundlegender obligatorischer Punkt ist.
Für externe Schlüssel in derselben Datenbank und für externe Datenbanken Ich habe ein einfaches Tutorial erstellt. Für diejenigen, die leicht wissen möchten, wie mehrere Datenbanken miteinander korreliert werden können.
--Cat Management App Cafe für Katzencafé --Erstellen Sie eine Tabelle mit dem Namen der Katze und eine Tabelle mit Ihrem Lieblingsfutter und ordnen Sie sie einem externen Schlüssel zu. --Cat Adressbuch App Negura --Erstellen Sie eine Datenbank mit Katzen. Wird von einem externen Schlüssel aus der Cafe-App aufgerufen.
Wenn Sie neu in Django sind, lesen Sie bitte zuerst das grundlegende Tutorial. Praktisches Tutorial zu Django in 10 Minuten
Erstellen Sie ein neues Projekt, indem Sie Folgendes an der Stelle ausführen, an der Sie die Quelle ablegen möchten.
django-admin startproject mysite
Geben Sie das erstellte Verzeichnis mysite ein und erstellen Sie zwei neue Anwendungen.
cd mysite
python manage.py startapp cafe
python manage.py startapp sumika
Die Anordnung der Dateien ist bisher so
mysite/
mysite/
__pycashe__/ <-macht dir keine Sorgen um
setting.py, urls.py etc.*.5 py
neko/
migrations/ <-macht dir keine Sorgen um
models.py, views.py etc.*.6 py
sumika/
migrations/ <-macht dir keine Sorgen um
models.py, views.py etc.*.6 py
manage.py
Registrieren Sie zwei Apps, Cafe und 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 ist ein externer Schlüssel in derselben Datenbank in der Cafe-App neko_negura ist der externe Schlüssel zur Negura-App, dh eine weitere Datenbank der nächsten App.
Die Methode def __str__ (self):
wird normalerweise in der generischen Ansicht von django benötigt, wenn ForeignKey verwendet wird.
Wenn Sie diese Methode nicht überschreiben, wenn sie im Browser angezeigt wird
Der Name der Instanz wird als "food_name.object (1)" anstelle von "sanma" angezeigt.
Dank dieser Methode wird die Zeichenfolge bei Verwendung von CreateView oder FormView in der Pulldown-Liste angezeigt.
neko_negura zieht das Modell also von einer externen App Rufen Sie das Modell auf, nachdem Sie dem App-Namen "negura.NeguraModel" vorangestellt haben.
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
Seien Sie nicht verwirrt darüber, welche Ansicht welche Vorlage verwendet Es hat einen verwirrenden Dateinamen.
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 erstellt eine neue Datei Ich habe ihm einen beschissenen Namen gegeben, damit ich nicht verwirrt bin, welcher Pfadname auf welche Ansicht verweist.
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'),
]
Erstellen Sie keine Ansicht für die Eingabe von Lebensmitteln oder Adressen, da das Lernprogramm viel Zeit in Anspruch nimmt. Bearbeiten und aktivieren Sie stattdessen admin.py für die Eingabe über den Admin-Bildschirm.
mysite/cafe/admin.py
from cafe.models import NekoModel, FoodModel
from django.contrib import admin
admin.site.register(NekoModel)
admin.site.register(FoodModel)
Erstellen Sie 3 Vorlagen. Ich habe es in das Standardverzeichnis gestellt, aber es gefällt mir nicht wirklich, weil die Hierarchie zu tief ist.
mysite/cafe/template/cafe/nekolistview_template.html
<h1>Ichiran von der Katze</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' %}">Katzenfutter</a></p>
<p><a href = "{% url 'neguralistview_path' %}">Katzenquartier</a></p>
<p><a href = "{% url 'nekocreateview_path' %}">Katze</a></p>
mysite/cafe/template/cafe/foodlistview_template.html
<h1>Katzenfutter</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 von der Katze</a></p>
mysite/cafe/template/cafe/nekocreateview.html
<h1>Katze</h1>
<form method = "post">
{% csrf_token %}
{{ form.as_p }}
<input type = "submit" value = "Toro" />
</form>
<p><a href = "{% url 'nekolistview_path' %}">Ichiran von der Katze</a></p>
Im Grunde ist es eine Wiederholung dessen, was ich im Café gemacht habe.
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)
Erstellen Sie eine Vorlage Der Speicherort ist der Standardspeicherort.
mysite/negura/template/negura/neguralistview_template.html
<h1>Katzenquartier</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 von der Katze</a></p>
Erstellen Sie nach der Migration einen Administrator für die Administrationssite und Machen Sie den Admin-Bildschirm zugänglich.
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
Starten Sie den Entwicklungsserver. Die Portnummer ist 8000, da sie standardmäßig gestartet wird.
python manage.py runserver
Greifen Sie mit einem Browser auf Folgendes zu, um den Administratorbildschirm anzuzeigen. "Eat" und "Sumika" können nicht direkt in diese App eingegeben werden. Geben Sie sie daher über den Administratorbildschirm ein.
http://localhost:8000/admin/
Zum Beispiel ist Essen "Sanma" und "Crispy" und Sumika ist "Danboru" und "Moufu".
Geben Sie Folgendes ein, um eine Liste der Katzen zu erhalten. Zunächst gibt es keine registrierten Katzen, daher liegen sie nicht auf dem Tisch.
http://localhost:8000/neko/
Wenn Sie den Registrierungsbildschirm über den Link "Cat Touroku" aufrufen, Geben Sie den Namen der Katze in das Formular ein und "Essen" und "Negura" können aus der Dropdown-Liste ausgewählt werden.
Das Ende
Recommended Posts