[PYTHON] Djangos External Key Tutorial in 10 Minuten

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

Vorbereitung

Ein Projekt erstellen

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  

Registrierung von Apps, aus denen das Projekt besteht

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

Implementierung der App

Erstellen einer Café-App

Erstellen von Modellen, Ansichten und 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)

Vorlage erstellen

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>

Erstellen einer Negura-App

Erstellen von Modellen, Ansichten und URLs

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)

Vorlage erstellen

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>

Fertig

Migrations- und Administratoreinstellungen

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 HTTP-Server und geben Sie die Anfangsdaten ein

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".

Funktionsprüfung

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

Djangos External Key Tutorial in 10 Minuten
Schreiben Sie externe Schlüsseleinschränkungen in Django
Django Foreign Key on_delete Argument
Fremdschlüssel in SQLite von Python [Hinweis]
Stellen Sie Django in 3 Minuten mit Docker-Compose bereit
CSS-Umgebung in 10 Minuten mit Django erstellt
Modell in Django
Python Django Tutorial (5)
Python Django Tutorial (2)
Django Tutorial Memo
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Python Django Tutorial (8)
Python Django Tutorial (6)
Starten Sie das Django Tutorial 1
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
Form in Django
Python Django Tutorial (3)
Python Django Tutorial (4)
Tastenanschlag in Python
Zusammenfassung des Python Django-Tutorials
Lerne Pandas in 10 Minuten
Django Polymorphic Associations Tutorial
Django 1.4.2 Generierung von Sitzungsschlüsseln
Django Oscar einfaches Tutorial
Modelländerungen in Django
Verstehe in 10 Minuten Selen
Selen läuft in 15 Minuten
Django Girls Tutorial Hinweis
Tastenanschlag in Python