69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
from django.db import models
|
|
from django.core.validators import RegexValidator
|
|
from django.core.validators import MinValueValidator
|
|
from django.core.validators import MaxValueValidator
|
|
|
|
|
|
class YearData(models.Model):
|
|
number = models.SmallIntegerField('Number', validators=[
|
|
RegexValidator(r'^-?[1-9]\d{0,3}$', 'Year must be not zero and between -9999 and 9999')
|
|
])
|
|
|
|
@property
|
|
def is_leap(self):
|
|
if self.number == 0:
|
|
return False
|
|
elif self.number % 400 == 0:
|
|
return True
|
|
elif self.number % 100 == 0:
|
|
return False
|
|
elif self.number % 4 == 0:
|
|
return True
|
|
return False
|
|
|
|
def __str__(self):
|
|
return f'({self.number}, {self.is_leap})'
|
|
|
|
|
|
class MonthData(models.Model):
|
|
number = models.SmallIntegerField('Number', unique=True, validators=[
|
|
MinValueValidator(1),
|
|
MaxValueValidator(18),
|
|
])
|
|
name = models.CharField('Name', max_length=64, unique=True)
|
|
folkname = models.CharField('Folkname', max_length=64, blank=True)
|
|
is_oneday = models.BooleanField('IsOneday')
|
|
is_leap_month = models.BooleanField('IsLeapMonth')
|
|
|
|
def __str__(self):
|
|
return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday}, {self.is_leap_month})'
|
|
|
|
|
|
class CalendarData(models.Model):
|
|
current_day = models.SmallIntegerField('Number', unique=True, validators=[
|
|
MinValueValidator(1),
|
|
MaxValueValidator(30),
|
|
])
|
|
current_month = models.ForeignKey(MonthData, on_delete=models.CASCADE)
|
|
current_year = models.ForeignKey(YearData, on_delete=models.CASCADE)
|
|
|
|
def __str__(self):
|
|
return f'({self.current_day}, {self.current_month}, {self.current_year})'
|
|
|
|
|
|
class Event(models.Model):
|
|
day = models.SmallIntegerField('Number', validators=[
|
|
MinValueValidator(1),
|
|
MaxValueValidator(30),
|
|
])
|
|
month = models.ForeignKey(MonthData, on_delete=models.CASCADE)
|
|
year = models.ForeignKey(YearData, on_delete=models.CASCADE)
|
|
time = models.TimeField('Time')
|
|
title = models.CharField('Title', max_length=250)
|
|
description = models.TextField('Description', max_length=2500)
|
|
is_suggested = models.BooleanField('IsSuggested')
|
|
is_only_for_gm = models.BooleanField('IsOnlyForGm')
|
|
|
|
def __str__(self):
|
|
return f'({self.day}, {self.time}, {self.title})'
|