[PYTHON] Django Todo Listenerstellung

Die Funktion zum Verwalten der Todo-Liste für jede Einrichtung wurde hinzugefügt! Ich dachte daran, den Eingabebildschirm für Schichten anzupassen und eine Validierungsregelfunktion zu erstellen, aber es war ziemlich schwierig und ich konnte es nicht finden, also habe ich eine neue App erstellt (lacht).

Der Bildschirm sieht so aus. image.png

Für die Anzeige des fertigen Teils habe ich überlegt, mit dem Kontrollkästchen zu wechseln und eine Frage an Qiita zu stellen. Da ich Javascript jedoch nicht verstehe, habe ich es mit dem Tag a implementiert, das auf dem erhaltenen Hinweis basiert.

image.png

Es ist ein Detailbildschirm, aber die Grundfunktion von Django ist wirklich zu einfach und geschmacklos (lacht)

Ich habe eine App erstellt, während ich dachte, ich müsste hier und da Eingabehilfe und Eingabeüberprüfungsfunktion hinzufügen (lacht)

todo/views.py



from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, DeleteView, UpdateView
from .models import TodoModel
from shisetsu.models import *
from accounts.models import *
from django.urls import reverse_lazy

# Create your views here.

def todolistfunc(request):
    #Erhalten Sie Zugehörigkeitsinformationen vom angemeldeten Benutzer
    current_user = request.user
    check_value =  request.POST.getlist('check')
    UserShozoku_list = UserShozokuModel.objects.filter(user = current_user).values_list("shisetsu_name", flat=True)
    UserShozoku_list = list(UserShozoku_list)
    if 'all' in request.GET:
        todo_list = TodoModel.objects.filter(shisetsu_name__in = UserShozoku_list).select_related().all().order_by("plants_enddate")
        kako = "off" 
    else:
        todo_list = TodoModel.objects.filter(shisetsu_name__in = UserShozoku_list).filter(enddate__isnull=True).select_related().all().order_by("plants_enddate")
        kako = "on"

    shisetsu_object = Shisetsu.objects.all()
    user_list = User.objects.select_related().all().order_by("profile__hyoujijyun")
    #Für die Anzeige der Einrichtungsschaltfläche erneut erforderlich
    UserShozoku_list = UserShozokuModel.objects.filter(user = current_user)

    context = {
        'todo_list': todo_list,
        'shisetsu_object': shisetsu_object,
        'user_list': user_list,
        'UserShozoku_list':UserShozoku_list,
        'kako':kako,
    }
    return render(request,'todo/list.html', context)

def todolistfilterfunc(request, shisetsu_num):
    shisetsu_num = int(shisetsu_num)
    #Erhalten Sie Zugehörigkeitsinformationen vom angemeldeten Benutzer
    current_user = request.user
    UserShozoku_list = UserShozokuModel.objects.filter(user = current_user).values_list("shisetsu_name", flat=True)
    UserShozoku_list = list(UserShozoku_list)
    #todo_list = TodoModel.objects.filter(shisetsu_name__in = UserShozoku_list).select_related().all().order_by("plants_enddate")
    if 'all' in request.GET:
        todo_list = TodoModel.objects.filter(shisetsu_name = shisetsu_num).select_related().all().order_by("plants_enddate")
        kako = "off" 
    else:
        todo_list = TodoModel.objects.filter(shisetsu_name = shisetsu_num).filter(enddate__isnull=True).select_related().all().order_by("plants_enddate")
        kako = "on"
        
    shisetsu_object = Shisetsu.objects.filter(id__in = UserShozoku_list)
    print(shisetsu_object)
    user_list = User.objects.select_related().all().order_by("profile__hyoujijyun")

    #Für die Anzeige der Einrichtungsschaltfläche erneut erforderlich
    UserShozoku_list = UserShozokuModel.objects.filter(user = current_user)

    context = {
        'todo_list': todo_list,
        'shisetsu_object': shisetsu_object,
        'user_list': user_list,
        'UserShozoku_list':UserShozoku_list,
    }
    return render(request,'todo/list.html', context)

class TodoDetail(DetailView):
    template_name = 'todo/detail.html'
    model = TodoModel

class TodoCreate(CreateView):
    template_name = 'todo/create.html'
    model = TodoModel
    fields = ('title', 'memo', 'priority','shisetsu_name', 'user', 'plants_startdate', 'plants_enddate', 'enddate')
    success_url = reverse_lazy('todo:list')

class TodoDelete(DeleteView):
    template_name = 'todo/delete.html'
    model = TodoModel
    success_url = reverse_lazy('todo:list')

class TodoUpdate(UpdateView):
    template_name = 'todo/update.html'
    model = TodoModel
    fields = ('title', 'memo', 'priority','shisetsu_name', 'user', 'plants_startdate', 'plants_enddate', 'enddate')
    success_url = reverse_lazy('todo:list')

urls.py


from django.urls import path, include
from .views import todolistfunc, todolistfilterfunc, TodoDetail,TodoCreate, TodoDelete, TodoUpdate

app_name = 'todo'
urlpatterns = [
    path('listfilter/<int:shisetsu_num>', todolistfilterfunc, name='listfilter'),
    path('list/', todolistfunc, name='list'),
    path('detail/<int:pk>', TodoDetail.as_view(), name='detail'),
    path('create/', TodoCreate.as_view(), name='create'),
    path('delete/<int:pk>', TodoDelete.as_view(), name='delete'),
    path('update/<int:pk>', TodoUpdate.as_view(), name='update'),
]

todo/list.html


{% extends 'templates/accounts/base.html' %}
{% load static %}
{% block header %}
<form action="" method="POST">{% csrf_token %}
<div class="jumbotron jumbotron-fluid">
    <div class="container">
      <h1 class="display-4">Aufgabenliste</h1>
      <p class="lead">Tu, was du kannst!</p>
      <a href="{% url 'todo:create' %}" class="btn-info btn active">Erstelle neu</a>
      <a href="{% url 'todo:list' %}" button type="button" class="btn btn-outline-dark">alles</a>
      {% for shisetsu in shisetsu_object %}
          {% for UserShozoku in UserShozoku_list %}
              {% if shisetsu.name|stringformat:"s" == UserShozoku.shisetsu_name|stringformat:"s" %}
                  <a href="{% url 'todo:listfilter' shisetsu.pk %}" button type="submit" class="btn btn-outline-dark" span style="background-color:{{ shisetsu.color }}">{{ shisetsu.name }}</span></a>
              {% endif %}
          {% endfor %}
      {% endfor %}
Einschließlich Fertigstellung
      <a href="{% url 'todo:list' %}?all" button type="button" class="btn btn-outline-dark">alles</a>
      {% for shisetsu in shisetsu_object %}
          {% for UserShozoku in UserShozoku_list %}
              {% if shisetsu.name|stringformat:"s" == UserShozoku.shisetsu_name|stringformat:"s" %}
                  <a href="{% url 'todo:listfilter' shisetsu.pk %}?all" button type="submit" class="btn btn-outline-dark" span style="background-color:{{ shisetsu.color }}">{{ shisetsu.name }}</span></a>
              {% endif %}
          {% endfor %}
      {% endfor %}
      </div>
    </div>
  </div>
</form>

{% endblock header %}

{% block content %}

<table class="table table-striped table-bordered table-hover ">
      <thead>
        <th>Name der Einrichtung</th>
        <th>Titel</th>
        <th>Priorität</th>
        <th>Verantwortliche Person</th>
        <th>Geplanter Starttermin</th>
        <th>Voraussichtliches Enddatum</th>
      </thead>
      <tr>
        {% for todo in todo_list %}
            <tbody class="table-{{ todo.priority }}">
                <td >{{ todo.shisetsu_name|default:"" }}</td>
                <td ><a href="{% url 'todo:update' todo.id %}">{{ todo.title }}</a></td>
                <td >{{ todo.get_priority_display }} </td>
                <td >{{ todo.user.last_name|default:"" }} {{ todo.user.first_name|default:"" }}</td>
                <td >{{ todo.plants_startdate|default:"" }} </td>
                <td >{{ todo.plants_enddate|default:"" }}</td>
            </tbody>
        {% endfor %}
        </tr>
      </div>
    </table>

{% endblock content %}

<script type="text/javascript">
  //Kontrollkästchen von ID abrufen
  const checkbox = documents.getElementsById('check');
  //Legen Sie einen Rückruf fest, der aufgerufen werden soll, wenn sich der Status des Kontrollkästchens ändert
  checkbox.addEventListener('change', (e) => {
    //Getrennte Bewegungen im Kontrollkästchen
    if (checkbox.checked) {
      location.href = 'todo:list'?all'
    } else {
      location.href = 'todo:list'
    }
  });
</script>
``

Das letzte Javascript haben Sie beantwortet. In Zukunft möchte ich meine Fähigkeiten verbessern, damit ich das umsetzen kann, was Sie mir beigebracht haben.


Recommended Posts

Django Todo Listenerstellung
ToDo-Listenerstellung [Python Django]
Erstellen und listen Sie Django-Modelle auf
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Erstellen Sie einen Django-Zeitplan
Einfache Aufgabenliste, erstellt mit Python + Django
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Erstellen Sie eine API mit Django
Django-Anfänger erstellen einfache Apps 3
Django-Anfänger erstellen einfache Apps 1
Erstellen Sie eine Homepage mit Django
Shell zum Erstellen eines Django-Projekts
Django-Anfänger erstellen einfache Apps 2
Erstellen Sie einen Django-Anmeldebildschirm
Erstellen Sie Ihre eigene Django-Middleware
Django-Anfänger erstellen einfache Apps 5
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Schritte zum Erstellen eines Django-Projekts
Flaschen-Tutorial: TODO List Application Bug
Erstellen Sie eine neue Anwendung mit Python, Django
Django
[Django] Erstellen Sie Ihre eigene 403, 404, 500-Fehlerseite
Erstellen Sie mit Django einen Datei-Uploader
Erstellen Sie mit Django einen LINE-Bot
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Erstellen Sie eine RESTful-API mit dem Django Rest Framework
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Erstellen Sie mit Django Updateview einen Update-Bildschirm
Erstellen der ersten App mit Django Startprojekt
Erstellen Sie einen Seiten- / Todo-Block mit der Notion-API
Implementieren Sie die Möglichkeit zu reservieren, was regelmäßig in der Django Todo-Liste passiert
Versuchen Sie, mit WebSocket mit Django (Swamp Dragon) eine Todo-Verwaltungssite zu erstellen.