[PYTHON] Ajout d'une fonction pour enregistrer les décalages souhaités dans la table des décalages Django

Dans un premier temps, lorsque l'administrateur reçoit une notification du quart de travail souhaité, enregistrez-le et lors de l'exécution de la création du quart de travail une fois par mois, créez d'abord un horaire à partir du quart de travail souhaité, et s'il n'y a pas de quart de travail, changez le même jour du mois précédent. Je vais essayer de le mettre.

Tout d'abord, le décalage souhaité

schedule/models.py


class KibouShift(models.Model):
    id = models.AutoField(verbose_name='ID d'équipe souhaité',primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Nom de l'employé')
    date = models.DateField(verbose_name='Date')
    shift_name_1 = models.ForeignKey(Shift, verbose_name='1 nom d'équipe', related_name='kibou_shift_name1',on_delete=models.SET_NULL,null= True)
    shisetsu_name_1 = models.ForeignKey(Shisetsu, verbose_name='1 établissement', related_name='kibou_shisetsu_name1',on_delete=models.SET_NULL,blank=True, null=True)
    shift_name_2 = models.ForeignKey(Shift, verbose_name='2 nom d'équipe', related_name='kibou_shift_name2',on_delete=models.SET_NULL,blank=True, null=True)
    shisetsu_name_2 = models.ForeignKey(Shisetsu, verbose_name='2 installations', related_name='kibou_shisetsu_name2',on_delete=models.SET_NULL,blank=True, null=True)
    shift_name_3 = models.ForeignKey(Shift, verbose_name='3 nom d'équipe', related_name='kibou_shift_name3',on_delete=models.SET_NULL,blank=True, null=True)
    shisetsu_name_3 = models.ForeignKey(Shisetsu, verbose_name='3 installations', related_name='kibou_shisetsu_name3',on_delete=models.SET_NULL,blank=True, null=True)
    shift_name_4 = models.ForeignKey(Shift, verbose_name='4 nom d'équipe', related_name='kibou_shift_name4',on_delete=models.SET_NULL,blank=True, null=True)
    shisetsu_name_4 = models.ForeignKey(Shisetsu, verbose_name='4 établissements', related_name='kibou_shisetsu_name4',on_delete=models.SET_NULL,blank=True, null=True)

    class Meta:
        unique_together = ('user', 'date')

schedule/admin.py


class KibouShiftAdmin(admin.ModelAdmin):
    list_display = ('date', 'user')
    ordering = [ "date" ]

admin.site.register(KibouShift, KibouShiftAdmin)

schedule/views.py


def kiboulistfunc(request):
    KibouShift_list = KibouShift.objects.all().order_by('-date')
    User_list = User.objects.all()
    shift_object = Shift.objects.all()
    context = {
        'KibouShift_list': KibouShift_list,
        'User_list': User_list,
        'shift_object': shift_object,
        }

    return render(request,'schedule/kiboushift/list.html', context )
        
class KibouCreate(CreateView):
    template_name = 'schedule/kiboushift/create.html'
    model = KibouShift
    fields = ('user', 'date', 'shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3', 'shift_name_4', 'shisetsu_name_4')
    success_url = reverse_lazy('schedule:KibouList')

class KibouUpdate(UpdateView):
    template_name = 'schedule/kiboushift/update.html'
    model = KibouShift
    fields = ('user', 'date', 'shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3', 'shift_name_4', 'shisetsu_name_4')
    success_url = reverse_lazy('schedule:KibouList')

class KibouDelete(DeleteView):
    template_name = 'schedule/kiboushift/delete.html'
    model = KibouShift
    fields = ('user', 'date', 'shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3', 'shift_name_4', 'shisetsu_name_4')
    success_url = reverse_lazy('schedule:KibouList')

schedule/kiboushift/base.html


<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
    {% block customcss %}
    {% endblock customcss %}
    <title>famille apparentée</title>
  </head>
  <body>

    
    {% block header %}
    {% endblock header %}

    {% block content %}
    {% endblock content %}

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
  </body>
</html>

schedule/kiboushifr/create.py


{% extends 'schedule/kiboushift/base.html' %}

{% block header %}
<div class="jumbotron jumbotron-fluid">
    <div class="container">
      <h1 class="display-4">Enregistrement de quart souhaité</h1>
      <p class="lead"></p>
    </div>
  </div>
{% endblock header %}

{% block content %}
<form action="" method="POST">{% csrf_token %}
    {{form.as_p}}
    <p><input type="submit" value="Créer" class="btn-info btn active">
    <a href="{% url 'schedule:KibouList' %}" class="btn-secondary btn active">Revenir</a></p>
</form>
{% endblock content %}

schedule/kiboushifr/delete.py


{% extends 'schedule/kiboushift/base.html' %}

{% block header %}
<div class="jumbotron jumbotron-fluid">
    <div class="container">
      <h1 class="display-4">Supprimer le quart de travail souhaité</h1>
      <p class="lead"></p>
    </div>
  </div>
{% endblock header %}

{% block content %}
<form action="" method="POST">{% csrf_token %}
  <p>Employé:{{ object.user }}</p>
  <p>Date:{{ object.date }}</p>
  <p>Nom de l'équipe:{{ object.shift_name_1|default:"" }}</p>
  <p>Établissement:{{ object.shisetsu_name_1|default:"" }}</p>
  <p>Nom de l'équipe:{{ object.shift_name_2|default:"" }}</p>
  <p>Établissement:{{ object.shisetsu_name_2|default:"" }}</p>
  <p>Nom de l'équipe:{{ object.shift_name_3|default:"" }}</p>
  <p>Établissement:{{ object.shisetsu_name_3|default:"" }}</p>
  <p>Nom de l'équipe:{{ object.shift_name_4|default:"" }}</p>
  <p>Établissement:{{ object.shisetsu_name_4|default:"" }}</p>
  <p><input type="submit" value="Effacer" class="btn-info btn active">
  <a href="{% url 'schedule:KibouList' %}" class="btn-secondary btn active">Revenir</a></p>
</form>
{% endblock content %}

schedule/kiboushifr/delete.py


{% extends 'schedule/kiboushift/base.html' %}

{% block header %}
<div class="jumbotron jumbotron-fluid">
    <div class="container">
      <h1 class="display-6">Liste des équipes souhaitées</h1>
      <p class="lead"></p>
      <a href="{% url 'schedule:KibouCreate' %}" class="btn-info btn active">s'inscrire</a>
      <a href="{% url 'schedule:homeschedule' %}" class="btn-info btn active">Table de décalage</a>
    </div>
  </div>
{% endblock header %}
{% block content %}
<table class="table table-striped table-bordered">
<div class='container'>
  <thead>
    <th>Date</th>
    <th>Nom de l'employé</th>
    <th>Changement d'espoir 1</th>
    <th>Installation souhaitée 1</th>
    <th>Changement d'espoir 2</th>
    <th>Installation souhaitée 2</th>
    <th>Changement d'espoir 3</th>
    <th>Changement d'espoir 3</th>
    <th>Changement d'espoir 4</th>
    <th>Installation souhaitée 4</th>
  </thead>
  <tbody>
    {% for item in KibouShift_list %}
      {% for staff in User_list %}
      {% if item.user|stringformat:"s" == staff.username|stringformat:"s" %}
        <tr>
          <td>
            <a href="{% url 'schedule:KibouUpdate' item.pk %}" class="btn btn-info" role="button" aria-pressed="true">Réparer</a>
            <a href="{% url 'schedule:kibouDelete' item.pk %}" class="btn btn-info" role="button" aria-pressed="true">Effacer</a>
            {{ item.date }}
          </td>
          <td >{{ staff.last_name }} {{ staff.first_name }}</td>
          <td >{{ item.shift_name_1|default:"" }} </td>
          <td >{{ item.shisetsu_name_1|default:"" }}</td>
          <td >{{ item.shift_name_2|default:"" }} </td>
          <td >{{ item.shisetsu_name_2|default:"" }}</td>
          <td >{{ item.shift_name_3|default:"" }} </td>
          <td >{{ item.shisetsu_name_3|default:"" }}</td>
          <td >{{ item.shift_name_4|default:"" }} </td>
          <td >{{ item.shisetsu_name_4|default:"" }}</td>
        </tr>
        {% endif %}
        {% endfor %}
    {% endfor %}
  </tbody>
  </div>
</table>
{% endblock content %}

schedule/kiboushifr/update.py


{% extends 'schedule/kiboushift/base.html' %}

{% block header %}
{% endblock header %}

{% block content %}
<form action="" method="POST">{% csrf_token %}
<div class="Container">
    {{ form.as_p }}
    {% csrf_token %}
    <p><input class="btn btn-primary" type="submit" value="mise à jour">
    <a href="{% url 'schedule:KibouList' %}" class="btn-secondary btn active">Revenir</a></p>
    {% for shift in shift_object %}
        {% if shift.name != "Fermé" and shift.name != "Oui" %}
            {{ shift.name }} : {{ shift.start_time }}~{{ shift.end_time }}
        {% endif %}
    {% endfor %}
</div>
</form>
{% endblock content %}

Ceci termine. Cliquez ici pour la liste

image.png

J'ai pu le faire pour le moment, mais en réalité, l'administrateur peut sélectionner une personne pour que la personne puisse s'inscrire, mais les utilisateurs généraux ne peuvent s'inscrire que pour eux-mêmes, je voulais afficher correctement le nom japonais, mais c'est plutôt bien Je n'y suis pas allé et j'ai pensé l'amener au point où cela pourrait fonctionner une fois, alors je l'ai interrompu!

image.png

image.png

image.png

image.png

Puisqu'il n'y a pas de partie titre au dessus de l'écran de correction, je vais le corriger ici

schedule/update.html


{% extends 'schedule/kiboushift/base.html' %}

{% block header %}
<div class="jumbotron jumbotron-fluid">
    <div class="container">
      <h1 class="display-4">Correction de décalage souhaitée</h1>
      <p class="lead"></p>
    </div>
  </div>
{% endblock header %}

{% block content %}
<form action="" method="POST">{% csrf_token %}
<div class="Container">
    {{ form.as_p }}
    {% csrf_token %}
    <p><input class="btn btn-primary" type="submit" value="mise à jour">
    <a href="{% url 'schedule:KibouList' %}" class="btn-secondary btn active">Revenir</a></p>
    {% for shift in shift_object %}
        {% if shift.name != "Fermé" and shift.name != "Oui" %}
            {{ shift.name }} : {{ shift.start_time }}~{{ shift.end_time }}
        {% endif %}
    {% endfor %}
</div>
</form>
{% endblock content %}

image.png

J'ai pu le réparer! Après cela, il est nécessaire d'ajouter une assistance à la saisie et une vérification des entrées. Je vais le mettre en œuvre à nouveau ici.

Ensuite, je voudrais implémenter la fonction pour créer un décalage à partir de la demande de décalage.

Recommended Posts

Ajout d'une fonction pour enregistrer les décalages souhaités dans la table des décalages Django
Je veux faire défiler la table de décalage Django, mais ...
Un mémorandum pour enregistrer la bibliothèque écrit en Hy dans PyPI
J'ai fait une commande pour générer un commentaire pour une table dans Django
Comment générer une requête à l'aide de l'opérateur IN dans Django
Table de décalage Django Afficher uniquement les installations auxquelles vous appartenez
Créez une fonction pour obtenir le contenu de la base de données dans Go
Mise en œuvre d'une fonction non publiée dans la table de décalage Django Ajout d'un contrôle de la couleur d'arrière-plan pour le décalage souhaité
Fonction de création de données de décalage de table Django terminée
La fonction _authenticate_with_backend était obsolète dans django auth.autenticate
Fonction de création de quart de travail Django Ajout de la fonction d'enregistrement de travail de base pendant des jours
Enregistrer automatiquement les arguments de fonction dans argparse en Python
Récupérer l'appelant d'une fonction en Python
J'ai ajouté une fonction à CPython (opérateur ternaire)
La première chose à vérifier quand un No Reverse Match se produit dans Django
Comment créer une API Rest dans Django
Comment se moquer d'une fonction publique dans Pytest
Affichez la table des équipes Django! Prend en charge la fermeture de 20 jours
Essayez de faire une stratégie de blackjack en renforçant l'apprentissage (② Enregistrer l'environnement dans le gymnase)
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Enregistrer une tâche dans cron pour la première fois
[Django] Perform Truncate Table (supprimer toutes les données de la table)
Comment afficher DataFrame sous forme de tableau dans Markdown
[Django] Ajout d'une nouvelle fonction de création de questions à l'application de sondages
Transition vers l'écran de mise à jour avec le Django a tag
J'ai fait une commande pour marquer le clip de la table
J'ai ajouté une fonction à CPython (construction et compréhension de la structure)
Comment référencer des fichiers statiques dans un projet Django
Que signifie le dernier () dans une fonction en Python?
Table de décalage Django Python
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
[C / C ++] Passez la valeur calculée en C / C ++ à une fonction python pour exécuter le processus et utilisez cette valeur en C / C ++.
Procédure pour changer le nom de la table et le nom de la colonne du modèle Django en même temps
Comment créer un enregistrement en collant une relation au modèle source d'héritage dans le modèle hérité par Django
Une histoire qui rend le débogage de modèle plus facile à voir dans l'environnement Django + SQLAlchemy
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
Une histoire à laquelle j'étais accro en spécifiant nil comme argument de fonction dans Go
Définir une tâche pour définir l'environnement de fabric dans YAML
Comment écrire une validation personnalisée dans Django REST Framework
Comment utiliser la méthode __call__ dans la classe Python
Changer la destination de sortie standard en un fichier en Python
Comment imprimer des caractères sous forme de tableau avec la fonction d'impression de Python
Combinez des listes dans un DataFrame avec des pandas
Fonction pratique pour ajouter des colonnes n'importe où dans Pandas DataFrame
Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
[python] Gérer les fonctions en les mettant dans un dictionnaire (table de commande, table de fonction, pointeur de fonction)
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
Je n'arrive pas à me connecter à la page d'administration avec Django 3
Créons une fonction pour maintenir Button dans Tkinter
Dans Django, comment abréger la longue chaîne de caractères affichée au milieu ...
[Python] Créez un programme qui supprime les sauts de ligne dans le presse-papiers + Enregistrez-vous comme raccourci avec Windows
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
Covector pour penser en fonction