[PYTHON] Django Tutorial Zusammenfassung für Anfänger von Anfängern ② (Model, Admin)

Einführung

Dieser Artikel ist eine Reihe, die das offizielle Django-Tutorial weiterentwickelt. Dieses Mal fahren wir mit dem zweiten Artikel fort: "Erstellen Ihrer ersten Django-App, Teil 2."

Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ① (Projekterstellung ~) Django-Tutorial-Zusammenfassung für Anfänger von Anfängern Model (Model, Admin) Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ③ (Anzeigen) Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ④ (generische Ansicht) Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test) Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑥ (statische Datei) Zusammenfassung der Django-Tutorials für Anfänger durch Anfänger ⑦ (Admin anpassen)

Erstellen Ihrer ersten Django-App, Teil 2

https://docs.djangoproject.com/ja/3.0/intro/tutorial02/

Datenbankeinstellungen

Standardmäßig verwendet Django SQlite. Stellen Sie die Datenbank in mysite / settings.py ein.

mysite/settings.py


# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

Ändern Sie die Datenbank, indem Sie ENGINE in "django.db.backends.sqlite3", "django.db.backends.postgresql", "django.db.backends.mysql" oder "django.db.backends.oracle" ändern Ich kann es schaffen

Ansonsten müssen je nach Datenbank Einstellungen wie "USER", "PASSWORD" und "HOST" hinzugefügt werden.

Derzeit handelt es sich um ein Tutorial, daher möchte ich SQLite so wie es ist verwenden.

Wie bei Rails muss eine Datenbank erstellt werden. Verwenden Sie daher zum Migrieren den folgenden Befehl.

$ python manage.py migrate

Werfen wir einen Blick auf die andere mysite / settings.py.

Stellen Sie die Zeitzone, die Sie einstellen möchten, in "TIME_ZONE" ein.

INSTALLED_APPS listet die Django-Anwendungen auf, die in Ihrem Projekt aktiviert sind.

Modell erstellen

Kehren wir zur Umfrage-App zurück und erstellen ein Modell.

polls/models.py


from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Als Python-Anfänger in der Klasse Frage (models.Model): Teil? ist geworden. Dies scheint darauf hinzudeuten, dass die Klasse "Question" eine Unterklasse von "models.Model" ist (genauer gesagt "django.db.models.Model").

Der Inhalt ist leicht zu verstehen, sobald Sie ihn gelesen haben.

Möglicherweise wird jede Tabelle in der Datenbank als Klasse dargestellt, und jedes Feld wird durch eine Instanz in der Datenbank dargestellt.

Sie können auch sehen, dass jedes Feld mit Standardwerten und -bedingungen als Argumente angegeben wird.

Sie können auch sehen, dass Auswahl in der Auswahlklasse an Frage gebunden ist.

Aktivieren Sie das Modell

Aktivieren Sie das Vorgängermodell.

Gehen Sie zurück zu "mysite / settings.py" und fügen Sie "polls.apps.PollsConfig" in "INSTALLED_APPS" hinzu.

mysite/settings.py


INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Sie haben die Anwendung jetzt zu Ihrem Projekt hinzugefügt.

Generieren Sie als Nächstes eine Migrationsdatei, die der Datenbank Tabellen usw. hinzufügt.

$ python manage.py makemigrations polls

Die generierte Migrationsdatei hat dieses Format.

polls/migrations/0001_initial.py


# Generated by Django 3.0.1 on 2020-01-02 09:09

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Question',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('question_text', models.CharField(max_length=200)),
                ('pub_date', models.DateTimeField(verbose_name='date published')),
            ],
        ),
        migrations.CreateModel(
            name='Choice',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('choice_text', models.CharField(max_length=200)),
                ('votes', models.IntegerField(default=0)),
                ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.Question')),
            ],
        ),
    ]

Führen Sie die Migration mit dem folgenden Befehl aus

$ python manage.py migrate

Spielen Sie mit der API

$ python manage.py shell

Sie können jetzt die Django-Shell starten.

python


>>> from polls.models import Choice, Question  # Import the model classes we just wrote.

# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>

# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

# Save the object into the database. You have to call save() explicitly.
>>> q.save()

# Now it has an ID.
>>> q.id
1

# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()

# objects.all() displays all the questions in the database.
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

Sie können auch mit der DB mit Shell spielen. (Ich habe es noch nie gemacht, aber kann ich es mit Rails oder Phoenix machen?)

Ganz am Ende, <QuerySet [<Question: Question object (1)>]>, ist es schwierig zu verstehen, welche Art von Objekt vorhanden ist. Fügen Sie also __str __ () zu polls / models.py hinzu.

Es scheint, dass str () in Python eine der speziellen Methoden ist, die ein Objekt als Zeichenfolge zurückgibt. Grundlegende spezielle Methoden und str

polls/models.py


from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

Fügen wir der Question-Klasse eine weitere Methode hinzu.

polls/models.py


import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

Klicken Sie hier für timedelta was_published_recently gibt zurück, ob die im Argument übergebene Frage innerhalb eines Tages nach der aktuellen Zeit veröffentlicht wurde.

Versuchen wir dies in Shell.

python


>>> from polls.models import Choice, Question

# Make sure our __str__() addition worked.
>>> Question.objects.all()
<QuerySet [<Question: Whats up?>]>

# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
>>> Question.objects.filter(id=1)
<QuerySet [<Question: Whats up?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: Whats up?>]>

# Get the question that was published this year.
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: Whats up?>

# Request an ID that doesn't exist, this will raise an exception.
>>> Question.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Question matching query does not exist.

# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
>>> Question.objects.get(pk=1)
<Question: Whats up?>

# Make sure our custom method worked.
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True

# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question's choice) which can be accessed via the API.
>>> q = Question.objects.get(pk=1)

# Display any choices from the related object set -- none so far.
>>> q.choice_set.all()
<QuerySet []>

# Create three choices.
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

# Choice objects have API access to their related Question objects.
>>> c.question
<Question: Whats up?>

# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3

# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there's no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>

# Let's delete one of the choices. Use delete() for that.
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()

In den folgenden Artikeln finden Sie Informationen zu den darin enthaltenen "Filtern" usw. Modellgrundlagen des Datenzugriffs

Wir stellen vor: Django Admin

Erstellen Sie einen Administrator

Erstellen Sie einen Administrator

$ python manage.py createsuperuser

Dadurch werden Sie aufgefordert, den Benutzernamen usw. einzugeben. Geben Sie ihn daher entsprechend ein.

Starten Sie den Entwicklungsserver

Starten Sie den Server.

$ python manage.py runserver

Und wenn Sie auf http://127.0.0.1:8000/admin/ zugreifen スクリーンショット 2020-01-02 20.31.57.png

Der Administrator-Anmeldebildschirm wird folgendermaßen angezeigt. Geben Sie also den zuvor festgelegten ein und melden Sie sich an.

Geben Sie die Admin-Site ein

![スクリーンショット 2020-01-02 20.36.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417600/34fc34d0-bdd5-9bda-1964-21c9a605f886.スクリーンショット2020-01-0220.50.44.png png)

Wenn Sie sich erfolgreich anmelden, werden Sie zu einem Bildschirm wie diesem weitergeleitet. Derzeit können nur Gruppen und Benutzer bearbeitet werden.

Ermöglichen, dass Umfrage-Apps im Administrator bearbeitet werden

polls/admin.py


from django.contrib import admin

from .models import Question

admin.site.register(Question)

Entdecken Sie die Funktionen von admin

Sie sollten jetzt die Fragen auf der Admin-Site sehen スクリーンショット 2020-01-02 20.43.31.png

Versuchen Sie, Frage zu drücken. スクリーンショット 2020-01-02 20.48.23.png

Auf dieser Seite können Sie neue Fragen erstellen.

Außerdem wird angezeigt, was UP ist, das zuvor mit Shell erstellt wurde. Wenn Sie darauf drücken, wird das Bearbeitungsformular wie unten gezeigt angezeigt.

スクリーンショット 2020-01-02 20.50.44.png

Von hier aus können Sie auch die Frage bearbeiten, den Bearbeitungsverlauf anzeigen und vieles mehr.

Recommended Posts

Django Tutorial Zusammenfassung für Anfänger von Anfängern ② (Model, Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑦ (Customize Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ① (Projekterstellung ~)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ④ (Generic View)
Zusammenfassung des Python Django-Tutorials
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
Zusammenfassung des maschinellen Lernens von Python-Anfängern
[Für Anfänger] Django -Entwicklungsumgebung Bau-
Was ist Schaben? [Zusammenfassung für Anfänger]
TensorFlow Tutorial MNIST Für ML-Anfänger
Django Girls Tutorial Zusammenfassung Erste Hälfte
Pandas Basics Summary Link für Anfänger
[Veraltet] Chainer v1.24.0 Anfänger-Tutorial
TensorFlow Tutorial -MNIST Für ML-Anfänger
[Erklärung für Anfänger] TensorFlow-Tutorial Deep MNIST
Django Zusammenfassung
Erstellen Sie ein Modell für Ihren Django-Zeitplan
[Linux-Befehlsübersicht] Befehlsliste [Muss für Anfänger]
Django Zusammenfassung
Linux-Betrieb für Anfänger Grundlegende Befehlsübersicht
Ein Lehrbuch für Anfänger von Python-Anfängern
Über Nims Funktionen höherer Ordnung für Nim-Anfänger, geschrieben von Nim-Anfängern
Durchführen des TensorFlow MNIST für ML-Anfänger-Tutorials
Django-Modell: ManyToManyField
Python Django Tutorial (5)
Python Django Tutorial (2)
Zusammenfassung des Python-Tutorials
Internationalisierungsunterstützung mit Django 1.9
Django Tutorial Memo
Python Django Tutorial (8)
Python Django Tutorial (6)
Starten Sie das Django Tutorial 1
Django Filter Zusammenfassung
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
Python Django Tutorial (3)
Python Django Tutorial (4)
Python-Anfänger versucht, dem Administrator von Django eine grundlegende Authentifizierung hinzuzufügen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Django-Tutorial (Erstellung von Blog-Apps) ② - Modellerstellung, Vorbereitung der Verwaltungssite
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
Caffe Model Zoo für Anfänger [Alters- und Geschlechtsklassifizierung]
[Linux] Grundlagen der Berechtigungseinstellung von chmod für Anfänger
[Für Anfänger] Django Häufig verwendete Befehle und Referenzsammlung
[Praktisch für Anfänger] Lesen Sie zaggles "Vorhersage der Eigenheimpreise" Zeile für Zeile (8. Erstellen eines Vorhersagemodells)