Files
LifeStats/web/models.py

43 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.core.exceptions import ValidationError
from django.db import models
class User(models.Model):
name = models.CharField(verbose_name='Имя', max_length=50)
email = models.CharField(verbose_name='Почта', max_length=50)
def __str__(self):
return f'{self.name}'
class Activity(models.Model):
type = models.TextField()
def __str__(self):
return f'{self.type}'
class ActivityLog(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Пользователь')
activity = models.ForeignKey(Activity, on_delete=models.CASCADE, verbose_name='Тип активности')
start_time = models.DateTimeField(verbose_name='Момент начала')
end_time = models.DateTimeField(verbose_name='Момент окончания')
logged_at = models.DateTimeField(auto_now_add=True)
def clean(self):
if self.start_time is None or self.end_time is None:
raise ValidationError(f'Не указано время: {self}')
if self.start_time >= self.end_time:
raise ValidationError(f'Некорректное время: {self}')
for other_activity in ActivityLog.objects.filter(user=self.user).exclude(id=self.id):
l = max(self.start_time, other_activity.start_time)
r = min(self.end_time, other_activity.end_time)
if r > l:
raise ValidationError(f'Пересекается с другой активностью: \n{self}\n{other_activity}\n{l}, {r}')
def __str__(self):
return f'ActivityLog[{self.user}, {self.activity}] {self.start_time}-{self.end_time} ({self.end_time - self.start_time})'