init
This commit is contained in:
39
web/models.py
Normal file
39
web/models.py
Normal file
@@ -0,0 +1,39 @@
|
||||
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})'
|
Reference in New Issue
Block a user