Files
LifeStats/web/models.py
2018-12-27 02:03:40 +04:00

40 lines
1.2 KiB
Python

from django.core.exceptions import ValidationError
from django.db import models
class User(models.Model):
name = models.TextField()
email = models.TextField()
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)
activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
logged_at = models.DateTimeField(auto_now_add=True)
def clean(self):
if self.start_time >= self.end_time:
raise ValidationError(f'Illegal times: {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'Intersects with another activity: \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})'