[PYTHON] Créer une liste Django Todo

Ajout de la fonction pour gérer la liste Todo pour chaque établissement! Je pensais ajuster l'écran de saisie pour les quarts de travail et créer une fonction de règle de validation, mais c'était assez difficile et je ne pouvais pas le trouver, alors j'ai créé une nouvelle application (rires).

L'écran ressemble à ceci. image.png

Pour l'affichage de la pièce terminée, j'ai envisagé de basculer avec la case à cocher et posé une question avec Qiita, mais comme je ne comprends pas le javascript, je l'ai implémenté avec la balise a en fonction de l'indice que j'ai reçu.

image.png

C'est un écran de détail, mais la fonction de base de Django est vraiment trop simple et insipide (rires)

J'ai créé une application en pensant que je devrais pouvoir ajouter une aide à la saisie et une fonction de vérification des entrées ici (rires)

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):
    #Obtenir les informations d'affiliation de l'utilisateur connecté
    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")
    #Réacquis pour l'affichage des boutons d'installation
    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)
    #Obtenir les informations d'affiliation de l'utilisateur connecté
    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")

    #Réacquis pour l'affichage des boutons d'installation
    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">Liste de choses à faire</h1>
      <p class="lead">Fais ce que tu peux!</p>
      <a href="{% url 'todo:create' %}" class="btn-info btn active">Créer un nouveau</a>
      <a href="{% url 'todo:list' %}" button type="button" class="btn btn-outline-dark">tout</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 %}
Y compris l'achèvement
      <a href="{% url 'todo:list' %}?all" button type="button" class="btn btn-outline-dark">tout</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>Nom de l'établissement</th>
        <th>Titre</th>
        <th>priorité</th>
        <th>Personne en charge</th>
        <th>Date de début prévue</th>
        <th>Date de fin prévue</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">
  //Obtenir la case à cocher de l'identifiant
  const checkbox = documents.getElementsById('check');
  //Définir un rappel à appeler lorsque l'état de la case à cocher change
  checkbox.addEventListener('change', (e) => {
    //Mouvements séparés dans l'état de case à cocher
    if (checkbox.checked) {
      location.href = 'todo:list'?all'
    } else {
      location.href = 'todo:list'
    }
  });
</script>
``

Le dernier javascript est ce que vous avez répondu. À l'avenir, j'aimerais améliorer mes compétences afin de pouvoir mettre en œuvre ce que vous m'avez appris.


Recommended Posts

Créer une liste Django Todo
Création de liste de tâches [Python Django]
Créer et lister des modèles Django
Créer une application Todo avec Django ③ Créer une page de liste de tâches
Créer un planning Django
Liste de tâches simple créée avec Python + Django
Créer une application Todo avec Django REST Framework + Angular
Essayez de créer une application Todo avec le framework Django REST
Créer une application Todo avec Django ⑤ Créer une fonction d'édition de tâches
Créer une API avec Django
Les débutants de Django créent des applications simples 3
Les débutants de Django créent des applications simples 1
Créer une page d'accueil avec django
Shell pour créer un projet django
Les débutants de Django créent des applications simples 2
Créer un écran de connexion Django
Créez votre propre middleware Django
Les débutants de Django créent des applications simples 5
Créer une application Todo avec Django ① Créer un environnement avec Docker
Étapes pour créer un projet Django
Didacticiel de bouteille: bogue d'application de la liste TODO
Créer une nouvelle application utiliser python, django
Django
[Django] Créez votre propre page d'erreur 403, 404, 500
Créer un téléchargeur de fichiers avec Django
Créer un bot LINE avec Django
Créer une application Todo avec Django ④ Implémenter la fonction de création de dossier et de tâche
Créer une API RESTful avec Django Rest Framework
Créez un modèle pour votre planning Django
Créer un écran de mise à jour avec Django Updateview
Création de la première application avec Django startproject
Créer un bloc de page / Todo avec l'API Notion
Implémenter la possibilité de réserver ce qui se passe régulièrement dans la liste Django Todo
Essayez de créer un site de gestion Todo en utilisant WebSocket avec Django (Swamp Dragon)