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
Erreur de vérification d'entrée
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