[PYTHON] Résumé du tutoriel Django pour les débutants par les débutants ② (Modèle, Admin)

introduction

Cet article est une série qui fait progresser le didacticiel officiel de Django. Cette fois, nous allons passer au deuxième article, "Création de votre première application Django, partie 2."

Résumé du tutoriel Django pour les débutants par les débutants ① (création de projet ~) Résumé du tutoriel Django pour les débutants par les débutants ② (Modèle, Admin) Résumé du tutoriel Django pour les débutants par les débutants ③ (Afficher) Résumé du tutoriel Django pour les débutants par les débutants ④ (Vue générique) Résumé du tutoriel Django pour les débutants par les débutants ⑤ (test) Résumé du tutoriel Django pour les débutants par les débutants ⑥ (fichier statique) Résumé des tutoriels Django pour les débutants par les débutants ⑦ (Customize Admin)

Création de votre première application Django, partie 2

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

Paramètres de la base de données

Par défaut, Django utilise SQlite. Définissez la base de données dans mysite / settings.py.

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'),
    }
}

Changez la base de données en changeant ENGINE en django.db.backends.sqlite3, django.db.backends.postgresql, django.db.backends.mysql ou django.db.backends.oracle Je peux le faire.

En dehors de cela, il est nécessaire d'ajouter des paramètres tels que «UTILISATEUR», «MOT DE PASSE» et «HÔTE» en fonction de la base de données.

Pour le moment, c'est un tutoriel, donc j'aimerais utiliser SQLite tel quel.

Comme pour Rails, il est nécessaire de créer une base de données, utilisez donc la commande suivante pour migrer.

$ python manage.py migrate

Jetons un coup d'œil à l'autre mysite / settings.py.

Définissez le fuseau horaire que vous souhaitez définir dans TIME_ZONE.

ʻINSTALLED_APPS` liste les applications Django qui sont activées dans votre projet.

Créer un modèle

Revenons à l'application de sondages et créons un modèle.

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)

En tant que débutant en Python, dans la classe Question (models.Model): part? est devenu. Cela semble indiquer que la classe Question est une sous-classe de models.Model (plus précisément, django.db.models.Model).

Le contenu est facile à comprendre une fois que vous l'avez lu.

Peut-être que chaque table de la base de données est représentée comme une classe et chaque champ est représenté par une instance.

Vous pouvez également voir que chaque champ est spécifié avec des valeurs et des conditions par défaut comme arguments.

Vous pouvez également voir que Choice est lié à Question dans la classe Choice.

Activer le modèle

Activez le modèle précédent.

Revenez à mysite / settings.py et ajoutez polls.apps.PollsConfig dans ʻINSTALLED_APPS`.

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

Vous avez maintenant ajouté l'application à votre projet.

Ensuite, générez un fichier de migration qui ajoute des tables, etc. à la base de données.

$ python manage.py makemigrations polls

Le fichier de migration généré a ce 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')),
            ],
        ),
    ]

Exécutez la migration avec la commande suivante

$ python manage.py migrate

Jouez avec l'API

$ python manage.py shell

Vous pouvez maintenant démarrer le shell Django.

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

Vous pouvez également jouer avec la base de données avec Shell. (Je ne l'ai jamais fait, mais puis-je le faire avec Rails ou Phoenix?)

À la toute fin, <QuerySet [<Question: Question object (1)>]>, il est difficile de comprendre quel type d'objet existe, alors ajoutez __str__ () à polls / models.py.

Il semble que «str ()» en Python soit l'une des méthodes spéciales qui renvoie un objet sous forme de chaîne de caractères. Méthodes spéciales de base et 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

Ajoutons une autre méthode à la classe Question.

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)

Cliquez ici pour timedelta was_published_recently renvoie si la question passée dans l'argument a été publiée dans un délai d'un jour à compter de l'heure actuelle.

Essayons ces derniers dans 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()

Veuillez vous référer aux articles suivants pour le filtre etc. Bases du modèle d'accès aux données

Présentation de Django Admin

Créer un utilisateur administrateur

Créer un utilisateur administrateur

$ python manage.py createsuperuser

Cela vous invitera à entrer le nom d'utilisateur, etc., alors entrez-le correctement.

Démarrer le serveur de développement

Démarrez le serveur.

$ python manage.py runserver

Et lorsque vous accédez à http://127.0.0.1:8000/admin/ スクリーンショット 2020-01-02 20.31.57.png

L'écran de connexion de l'administrateur apparaîtra comme ceci, alors entrez celui que vous avez défini précédemment et connectez-vous.

Entrez dans le site d'administration

![スクリーンショット 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)

Si vous vous connectez avec succès, vous serez redirigé vers un écran comme celui-ci. Actuellement, seuls les groupes et les utilisateurs peuvent être modifiés.

Autoriser les applications de sondage à être modifiées sur l'administrateur

polls/admin.py


from django.contrib import admin

from .models import Question

admin.site.register(Question)

Explorez les fonctionnalités de l'administrateur

Vous devriez maintenant voir les questions sur le site d'administration スクリーンショット 2020-01-02 20.43.31.png

Essayez d'appuyer sur Question. スクリーンショット 2020-01-02 20.48.23.png

Vous pouvez créer de nouvelles questions sur cette page.

En outre, ce qui est UP? Créé avec Shell plus tôt est affiché. Lorsque vous appuyez dessus, le formulaire d'édition sera affiché comme indiqué ci-dessous.

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

À partir de là, vous pouvez également modifier la question, afficher l'historique des modifications, etc.

Recommended Posts

Résumé du tutoriel Django pour les débutants par les débutants ② (Modèle, Admin)
Résumé du tutoriel Django pour les débutants par les débutants ⑦ (Personnaliser l'administrateur)
Résumé du tutoriel Django pour les débutants par les débutants ③ (Afficher)
Résumé du tutoriel Django pour les débutants par les débutants ⑤ (test)
Résumé du tutoriel Django pour les débutants par les débutants ① (création de projet ~)
Résumé du didacticiel Django pour les débutants par les débutants ④ (Vue générique)
Résumé du didacticiel Python Django
[Explication pour les débutants] Tutoriel TensorFlow MNIST (pour les débutants)
Résumé de l'apprentissage automatique par les débutants de Python
[Pour les débutants] Django -Construction d'environnement de développement-
Qu'est-ce que le grattage? [Résumé pour les débutants]
Tutoriel TensorFlow MNIST pour les débutants en ML
Résumé du didacticiel Django Girls Première moitié
Lien récapitulatif des bases de Pandas pour les débutants
[Déprécié] Tutoriel pour débutant Chainer v1.24.0
Tutoriel TensorFlow -MNIST pour les débutants en ML
[Explication pour les débutants] Tutoriel TensorFlow Deep MNIST
Résumé de Django
Créez un modèle pour votre planning Django
[Résumé des commandes Linux] Liste des commandes [À voir absolument pour les débutants]
Résumé de Django
Fonctionnement Linux pour les débutants Résumé des commandes de base
Un manuel pour les débutants réalisé par des débutants Python
À propos des fonctions d'ordre supérieur de Nim pour les débutants Nim écrites par les débutants Nim
Réalisation du didacticiel TensorFlow MNIST pour débutants en ML
Modèle Django: ManyToManyField
Tutoriel Python Django (5)
Tutoriel Python Django (2)
Résumé du didacticiel Python
Prise en charge de l'internationalisation avec Django 1.9
mémo du didacticiel django
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Démarrer le didacticiel Django 1
Résumé du filtre Django
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Tutoriel Python Django (3)
Tutoriel Python Django (4)
python débutant essaie d'ajouter une authentification de base à l'administrateur de Django
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
Tutoriel Django (création d'applications de blog) ② - création de modèles, préparation de site de gestion
Résumé des méthodes de prétraitement pour les débutants en Python (trame de données Pandas)
Caffe Model Zoo pour les débutants [Classification selon l'âge et le sexe]
[Linux] Principes de base de la configuration des autorisations par chmod pour les débutants
[Pour les débutants] Django Commandes fréquemment utilisées et collection de références
[Pratique pour les débutants] Lire ligne par ligne "Prédiction des prix des logements" de kaggle (8e: Création d'un modèle de prédiction)