[PYTHON] Vérification d'entrée Django et entrée de type de calendrier

Maintenant que le squelette a été créé dans une certaine mesure, nous avons mis au défi la fonction d'aide à la saisie afin qu'elle puisse être utilisée facilement lorsqu'elle est réellement utilisée. La prévention des entrées erronées est importante pour la construction du système.

Tout d'abord, cela a pris plus de 10 heures, mais j'ai réussi à implémenter le contrôle d'entrée. Le décalage est du 21 au 20 suivant, et il a été dit que la demande a été entendue le 5 et distribuée le 10, donc si elle dépasse le 5, la date avant le 20 du mois prochain sera J'ai rendu impossible la saisie.

L'entrée du calendrier n'est pas encore jolie, mais je l'ai implémentée.

schedule/forms.py


from django import forms
from .models import Schedule, Shisetsu, Shift, KibouShift
import datetime
from datetime import timedelta
from datetime import datetime as dt
from django.core import validators
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator,MinValueValidator
from dateutil.relativedelta import relativedelta
from bootstrap_datepicker_plus import DatePickerInput
import bootstrap_datepicker_plus as datetimepicker

class ScheduleUpdateForm(forms.ModelForm):
    class Meta:
        model = Schedule
        fields = ('shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3','shift_name_4', 'shisetsu_name_4', 'day_total_worktime')
    
    #Si l'équipe 1 est fermée, l'installation 1 est laissée vide
    #def clean(self):
    #    cleaned_data = super().clean()
    #    shift_name_1 = self.cleaned_data['shift_name_1']
    #    shisetsu_name_1 = self.cleaned_data['shisetsu_name_1']
    #    if str(shift_name_1) == "Fermé":
    #        if shisetsu_name_1 != None:
    #            raise forms.ValidationError("Aucune entrée d'installation n'est requise pendant les vacances")
    #        return shift_name_1

class KibouShiftForm(forms.ModelForm):
    class Meta:
        model = KibouShift
        fields = ('shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3','shift_name_4', 'shisetsu_name_4')


class KibouUpdateForm(forms.ModelForm):
    class Meta:
        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')
        widgets = {
            'date': datetimepicker.DatePickerInput(
            format='%Y-%m-%d',
            options={
                'locale': 'ja',
                'dayViewHeaderFormat': 'AAAA année MMMM',
                'ignoreReadonly': True,
                'allowInputToggle': True,
                }
            ),
        }
    def clean_date(self):
        dt_now = datetime.datetime.now()
        dt_date = self.cleaned_data.get('date')
        #Entrez seulement après le 20 au 5e
        if dt_now.day > 5:
            startdate = datetime.date(dt_now.year,dt_now.month,20) + relativedelta(months=1)
            if dt_date < startdate:
                raise forms.ValidationError(
                "Je ne peux pas entrer car la date limite est passée",
                )
        else:
            startdate = datetime.date(now.year,now.month,20)
            if dt_date < startdate:
                raise forms.ValidationError(
                "Je ne peux pas entrer car la date limite est passée",
                )
        return self.cleaned_data.get('date')
    
class KibouCreateForm(forms.ModelForm):
        class Meta:
            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')
            widgets = {
                'date': datetimepicker.DatePickerInput(
                format='%Y-%m-%d',
                options={
                    'locale': 'ja',
                    'dayViewHeaderFormat': 'AAAA année MMMM',
                    'ignoreReadonly': True,
                    'allowInputToggle': True,
                    }
                ),
            }
        def clean_date(self):
            dt_now = datetime.datetime.now()
            dt_date = self.cleaned_data.get('date')
            #Entrez seulement après le 20 au 5e
            if dt_now.day > 5:
                startdate = datetime.date(dt_now.year,dt_now.month,20) + relativedelta(months=1)
                if dt_date < startdate:
                    raise forms.ValidationError(
                    "Je ne peux pas entrer car la date limite est passée",
                    )
            else:
                startdate = datetime.date(now.year,now.month,20)
                if dt_date < startdate:
                    raise forms.ValidationError(
                    "Je ne peux pas entrer car la date limite est passée",
                    )
            return self.cleaned_data.get('date')

schedule/kiboushift/update.html


{% extends 'schedule/kiboushift/base.html' %}
{% load static %}
{% block customcss %}
<link rel="stylesheet" type="text/css" href ="{% static 'schedule/kiboushift/update.css' %}">
{% endblock customcss %}

{% 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 %}
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
<link href="//cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<link href="//cdn.bootcss.com/bootstrap-datetimepicker/4.17.44/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
<script src="//cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="//cdn.bootcss.com/moment.js/2.17.1/moment.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap-datetimepicker/4.17.44/js/bootstrap-datetimepicker.min.js"></script>
<div class="container">
  {{ form.media }}
  {{ form.as_p }}
  {% csrf_token %}
    <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 %}

Il s'est avéré être quelque chose comme ça. Entrée de calendrier image.png

Erreur de vérification d'entrée

image.png

Lorsque je suis entré dans le calendrier, la zone de saisie s'est soudainement étendue et j'ai essayé de la corriger avec CSS, mais cela peut être appliqué ...

Je voudrais montrer la sélection du nom de l'employé en tant que Taro Yamada en combinant le nom et le prénom au lieu du nom d'utilisateur, mais je n'ai aucune idée de comment résoudre ce problème ...

Cela aussi. Je fais des recherches depuis près de 3 heures, mais je ne le trouve pas facilement ... Je vais te poser une question (⌒∇⌒)

Si vous posez une question sur Qiita, toutes ont été résolues jusqu'à présent. Je vous remercie

Recommended Posts

Vérification d'entrée Django et entrée de type de calendrier
Vérification d'entrée Django et entrée de type de calendrier
Vérification de la version de Django
Installez Python 3.7 et Django 3.0 (CentOS)
django data input dumpdata loaddata
réglage du fuseau horaire et de la langue de django
Créer et lister des modèles Django
[Django] Organiser les commandes et les rôles
[Note] Création et terminologie du projet Django
Définir des espaces réservés dans les champs de saisie dans Django
HTTPS avec Django et Let's Encrypt
Vérifiez et déplacez le répertoire en Python