[PYTHON] Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen

In diesem Kapitel erstellen wir eine Aufgabenlistenseite.

Liste der Artikel

Erstellen Sie eine Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker Erstellen einer Todo-App mit Django ② Erstellen einer Ordnerlistenseite Todo-App mit Django erstellen ③ Seite mit Aufgabenliste erstellen Todo-App mit Django erstellen ④ Implementieren der Ordner- und Aufgabenerstellungsfunktion Erstellen einer Todo-App mit Django ⑤ Erstellen einer Aufgabenbearbeitungsfunktion

Führen Sie die Migration durch

Erstellen Sie zunächst eine Aufgabentabelle. Die Aufgabentabelle ist wie folgt definiert.

Logischer Spaltenname Physischer Name der Spalte
ID id
folderID folder_id
Titel title
Status status
Erstellungsdatum created_at

Auf dieser Grundlage werden wir models.py bearbeiten. Fügen Sie das folgende Aufgabenmodell hinzu.

todo/models.py


class Task(models.Model):
    STATUS_CHOICES = [(1, 'Unvollständig'),(2, 'Arbeiten'),(3, 'Erledigt')]

    title = models.CharField(max_length=100)
    status = models.IntegerField(choices=STATUS_CHOICES, default=1)
    due_date =  models.DateField(default=timezone.now)
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(blank=True, null=True)
    folder_id = models.ForeignKey(Folder, on_delete = models.CASCADE)

    def publish(self):
        self.update_at = timezone.now()
        self.save()

    def __str__(self):
        return self.title

Hier gibt es zwei Punkte.

Der erste ist der Status-Teil.

todo/models.py


STATUS_CHOICES = [(1, 'Unvollständig'),(2, 'Arbeiten'),(3, 'Erledigt')]

status = models.IntegerField(choices=STATUS_CHOICES, default=1)

Ich habe den Status auf IntergerField gesetzt, aber den Standardwert auf 1 gesetzt. Der Ausgangszustand beim Erstellen einer Aufgabe ist immer "unvollständig". Wenn Sie also nichts angeben, wird "1" eingegeben. Darüber hinaus weist die Option Auswahlmöglichkeiten Ganzzahlen unvollständig, funktionierend und abgeschlossen zu.

Der zweite ist der folder_id Teil.

todo/models.py


folder_id = models.ForeignKey(Folder, on_delete = models.CASCADE)

Der ForeignKey verknüpft das Ordnermodell und das Aufgabenmodell. Im Teil on_delete = ... können Sie alle Objekte löschen, die dem zu löschenden Objekt zugeordnet sind, indem Sie CASCADE festlegen. Dieser Artikel ist anhand konkreter Beispiele leicht zu verstehen. (Übrigens bedeutet "Kaskade" "kleine Wasserfälle mit vielen Schritten", und wenn Sie sich daran erinnern, ist es leicht zu verstehen, dass Objekte hintereinander gelöscht werden.)

Erstellen Sie zu diesem Zeitpunkt eine Migrationsdatei mit "Migrationen erstellen". Führen Sie den folgenden Befehl aus.

$ docker-compose run web python3 manage.py makemigrations

Bei der Ausführung sieht es wie folgt aus, und eine neue Migrationsdatei wird im Verzeichnis "todo / migrations" erstellt.

$ docker-compose run web python3 manage.py makemigrations
Starting django_todo_db_1 ... done
Migrations for 'todo':
  todo/migrations/0002_task.py
    - Create model Task

Nachdem Sie die Migrationsdatei erstellt haben, führen Sie den folgenden Befehl aus, um sie zu migrieren.

$ docker-compose run web python3 manage.py migrate

Bei der Ausführung ist dies wie folgt.

docker-compose run web python3 manage.py migrate       
Starting django_todo_db_1 ... done
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, todo
Running migrations:
  Applying todo.0002_task... OK

Verwaltungssite anzeigen

Überprüfen Sie nach der Migration die Admin-Site (http: // localhost: 8000 / admin /). Obwohl ich das Aufgabenmodell hätte migrieren sollen, wird das Element "Aufgabe" nicht angezeigt.

Screenshot from 2020-04-17 10-48-48.png

Um das Aufgabenmodell anzuzeigen, müssen Sie das Aufgabenmodell in admin.py importieren. Fügen Sie es wie folgt zu admin.py hinzu.

todo/aadmin.py


from django.contrib import admin
from .models import Folder, Task#hinzufügen

admin.site.register(Folder)
admin.site.register(Task)#hinzufügen

Wenn Sie die Admin-Site erneut besuchen, sehen Sie, dass das Element Aufgaben unter Ordner hinzugefügt wurde (siehe Abbildung unten).

Screenshot from 2020-04-17 10-51-55.png

Lassen Sie uns noch einmal einige Aufgaben auf der Admin-Site hinzufügen.

Schreibansicht

Bearbeiten Sie views.py wie folgt.

todo/views.py


from django.shortcuts import render, get_object_or_404#hinzufügen
from django.utils import timezone
from .models import Folder, Task#hinzufügen

def index(request, id):
    #Holen Sie sich alle Ordner
    folders = Folder.objects.filter(created_at__lte=timezone.now()).order_by('created_at')
    #Holen Sie sich den ausgewählten Ordner
    current_folder = get_object_or_404(Folder, id=id)
    #Aufgaben für den ausgewählten Ordner abrufen
    tasks = Task.objects.filter(folder_id = current_folder.id)

    return render(request, 'index.html', {
        'folders':folders,
        'tasks':tasks,
        'current_folder_id': current_folder.id,
    })![Screenshot from 2020-04-17 11-03-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370196/2effc6d9-ccd6-3485-3eaa-4dceb2ae76da.png)

[Get_object_or_404 function] in der ersten Zeile Importieren (https://docs.djangoproject.com/ja/3.0/topics/http/shortcuts/#get-object-or-404). In der dritten Zeile wird das in models.py definierte Task-Modell importiert.

Wenn in der Funktion "get_object_or_404" das "pk (Primärschlüssel)" im Ordnermodell empfangen wird, dh die "ID", die mit der "ID" übereinstimmt, wird das der "ID" entsprechende Objekt dem "aktuellen Ordner" zugewiesen. Es wird ein 404-Fehler ausgegeben, wenn eine "ID" empfangen wird, die in der "ID" des Ordnermodells nicht vorhanden ist. Wenn beispielsweise nur 3 Ordner eingefügt werden, führt der Zugriff auf http: // localhost: 8000 / folders / 5 / task zu einem 404-Fehler (siehe unten). Screenshot from 2020-04-17 11-03-21.png

Als nächstes über diesen Teil.

tasks = Task.objects.filter(folder_id = current_folder.id)

Hier wird die Filterfunktion verwendet, um alle Aufgaben abzurufen, deren Ordner-ID der ID des ausgewählten Ordners entspricht, und um sie den Aufgaben zuzuweisen.

Vorlage bearbeiten

Um die Aufgabenliste anzuzeigen, fügen Sie den folgenden Code in templates / index.html ein, wo der Kommentar <! - Aufgaben hier-> angezeigt wird.

templates/index.html


<div class="panel panel-default">
  <div class="panel-heading">Aufgabe</div>
  <table class="table">
    <thead>
    <tr>
      <th>Titel</th>
      <th>Status</th>
      <th>Frist</th>
      <th></th>
    </tr>
    </thead>
    <tbody>
      {% for task in tasks %}
        <tr>
          <td>{{ task.title }}</td>
          <td>
            <span 
            class="label {% if task.status == 1 %}label-danger{% endif %}{% if task.status == 2 %}label-info{% endif %}"
            >
            {{ task.get_status_display }}
            </span>
          </td>
          <td>{{ task.due_date }}</td>
          <td><a href="#">Bearbeiten</a></td>
        </tr>
      {% endfor %}
    </tbody>
  </table>
  <div class="panel-body">
    <div class="text-right">
      <a href="#" class="btn btn-default btn-block">
Fügen Sie eine Aufgabe hinzu
      </a>
    </div>
  </div>
</div>

Ich denke, die folgenden Teile sollten beachtet werden.

<span 
class="label {% if task.status == 1 %}label-danger{% endif %}{% if task.status == 2 %}label-info{% endif %}"
>
{{ task.get_status_display }}
</span>

Um den "Namen" eines Feldes zu erhalten, dessen Wert durch das Auswahlattribut begrenzt ist, müssen Sie die Methode get_status_display verwenden. (Die Methode get_status_display wird willkürlich definiert. Weitere Informationen finden Sie unter So erhalten Sie den "Namen" eines Felds, dessen Wert durch das Auswahlattribut im Django-Modell begrenzt ist. / 37bf4f5f6b60ccccebe2))

Wenn Sie die if-Anweisung verwenden, wird, wenn task.status 1 ist, dh wenn es unvollständig ist, "label-risk" verwendet, und wenn task.status 2 ist, dh wenn es funktioniert, wird "label-info" verwendet. Zuordnung und CSS werden für jeden Aufgabenstatus angewendet.

Wenn Sie hier sind, gehen Sie zu http: // localhost: 8000 / folders / 1 / task, um es zu überprüfen! Es ist in Ordnung, wenn es wie folgt aussieht!

Screenshot from 2020-04-17 11-11-36.png

abschließend

Sie haben jetzt die Aufgaben aufgelistet! Der bisherige Code befindet sich im Zweig Repository Kapitel 3. Als nächstes implementieren wir die Ordnererstellungsfunktion!

Liste der Artikel

Erstellen Sie eine Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker Erstellen einer Todo-App mit Django ② Erstellen einer Ordnerlistenseite Todo-App mit Django erstellen ③ Seite mit Aufgabenliste erstellen Todo-App mit Django erstellen ④ Implementieren der Ordner- und Aufgabenerstellungsfunktion Erstellen einer Todo-App mit Django ⑤ Erstellen einer Aufgabenbearbeitungsfunktion

Recommended Posts

Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Django Todo Listenerstellung
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schichterstellungsseite)
Einfache Aufgabenliste, erstellt mit Python + Django
ToDo-Listenerstellung [Python Django]
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Einführung)
Erstellen Sie eine Homepage mit Django
Erstellen Sie mit Django einen Datei-Uploader
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schreiben Sie eine Basisvorlage)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Authentifizierungsverarbeitung)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)
Erstellen Sie eine GUI-App mit Tkinter of Python
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Entwurf des Datenbankmodells)
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen der ersten App mit Django Startprojekt
Erstellen Sie einen Seiten- / Todo-Block mit der Notion-API
Erstellen Sie eine PDF-Datei mit einer zufälligen Seitengröße
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Bis Sie eine neue App in Django erstellen
Erstellen Sie einen Django-Zeitplan
Versuchen Sie, mit WebSocket mit Django (Swamp Dragon) eine Todo-Verwaltungssite zu erstellen.
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
Für mich als Django-Anfänger (1) -Erstellen eines Projekts / einer App-
Für mich als Django-Anfänger (4) - Erstellen Sie eine Memo-App-
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
[Go language] Erstellen Sie eine TUI-App mit Elm Architecture. Erstellen Sie eine leicht reichhaltige ToDo-App mit bubbletea
Todo App mit Django-Bootstrap-Modal-Forms-Plugin
Erstellen Sie eine API mit Django
Erstellen Sie einen Django-Anmeldebildschirm
Erstellen und listen Sie Django-Modelle auf
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie eine Shogi Score Management App mit Django 4 ~ Create View ~
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 2)
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 3)
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Flask-Erstellen Sie eine Todo-Liste mit CSRF-Maßnahmen mit WTF mit Flask
Erstellen Sie mit Django eine API für die soziale Integration von Smartphone-Apps
[Python] Erstellen Sie mit Django einen Bildschirm für den HTTP-Statuscode 403/404/500
Schritte zum Erstellen eines Django-Projekts
Erstellen Sie eine Shogi Score Management App mit Django 2 ~ Datenbankeinstellungen ~
Erstellen Sie eine temporäre Datei mit Django als Zip und geben Sie sie zurück
Erstellen Sie eine Shogi Score Management App mit Django 6 ~ Split Template ~
Erstellen Sie eine virtuelle Umgebung mit Python!
Rails-Benutzer versuchen, mit Django eine einfache Blog-Engine zu erstellen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Erstellen und Bereitstellen von Django-Apps (PTVS) mithilfe des Azure Table-Speichers
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Implementieren Sie die Django-App auf Hy