mes models.py:
class Attendancename(models.Model):
teacher_name = models.ForeignKey(Teachername, default='Ram')
date = models.DateField('Date', default=datetime.datetime.today)
intime = models.TimeField('IN-TIME', auto_now=True)
outtime = models.TimeField('OUT-TIME', auto_now=True)
def hours_conversion(self):
startdelta = datetime.timedelta(hours=self.intime.hours, minutes=self.intime.minutes, seconds=self.intime.seconds)
enddelta = datetime.timedelta(hours=self.outtime.hours, minutes=self.outtime.minutes, seconds=self.outtime.seconds)
return (enddelta-startdelta).seconds/3600
def __str__(self):
return "%s" %self.teacher_name
mon views.py:
def add_atten(request):
if request.method == 'POST':
form = AttendancenameForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('student:listatten'))
else:
print(form.errors)
else:
form = AttendancenameForm()
return render(request, 'add_atten.html', {'form': form},)
mes forms.py:
class AttendancenameForm(ModelForm):
intime = forms.TimeField(input_formats=('%H:%M',))
outtime = forms.TimeField(input_formats=('%H:%M',))
teacher_name = forms.ModelChoiceField(queryset=Teachername.objects.all())
class Meta:
model = Attendancename
fields = ('teacher_name', 'date', 'intime', 'outtime',)
En fait, j'essaie de calculer le nombre total d'heures en fonction de la différence de 'intime'
et 'outtime'
dans mon fichier models.py mais il s'élève au-dessus d'erroe. Je pense que je fais une erreur de syntaxe. Quelqu'un peut-il me dire quelle est la syntaxe ou la méthode correcte pour le faire? Est-ce que n'importe quel corps me suggère quoi faire pour le réparer?
C'est parce que vous ne pouvez pas soustraire un datetime.time
D'un datetime.time
. Convertissez-les en objets datetime.datetime
Et cela renverra un objet datetime.timedelta
Que vous pourriez utiliser.
À défaut, je recommanderais de convertir le timedelta
en secondes ou en représentation à virgule flottante afin que vous puissiez réellement le stocker dans la base de données.
EDIT: Tiré vers le haut dans les commentaires pour demi-arsing une réponse.
Par exemple - si vous souhaitez stocker le nombre de secondes (entières), vous pouvez convertir à partir d'un TimeDelta
en utilisant secs = td // timedelta(seconds=1)
.