【发布时间】:2011-09-04 18:23:25
【问题描述】:
我已经设置了几个模型,您很快就会在我的代码中看到。这些模型是时代、年、月、日和小时。
我想,当我创建一个时代时,它会创建一组年份,然后创建月份,然后创建日期,然后创建小时。我敢肯定,如果有人可以帮助我使用从时代到年份步骤的方法,我可以解决大部分问题。
目标是让 CurrentTime 模型能够逐步遍历所有其他模型(基本上就像一个时钟)。
如果您想知道,我将尝试制作一个简单的基于网络的游戏,这就是为什么这些值与常规日历有点不同!
这是我的 models.py 文件:
from django.db import models
# Create your models here.
DAY_LENGTH = 24 #1 day is 24 hours
MONTH_LENGTH = 24 #1 month is 24 days
MONTH_CHOICES = (
(1, 'January'),
(2, 'Febuary'),
(3, 'March'),
(4, 'April'),
(5, 'May'),
(6, 'June'),
(7, 'July'),
(8, 'August'),
(9, 'September'),
(10, 'October'),
(11, 'November'),
(12, 'December'),
(13, 'Extravember'),
(14, 'Othertober'),
)
DAY_CHOICES = (
(1, 'Monday'),
(2, 'Tuesday'),
(3, 'Wednesday'),
(4, 'Thursday'),
(5, 'Friday'),
(6, 'Saturday'),
)
YEAR_LENGTH = MONTH_CHOICES.length #1 year contains
ERA_LENGTH = 9999 #1 era is 9999 years #one of every month
NUMBER_OF_BLOCKS = 6 #Number of discreet actions programmable for a day
BLOCK_LENGTH = DAY_LENGTH / NUMBER_OF_BLOCKS
class Era(models.Model):
#Era number
value = models.AutoField()
#Name of the Era
name = models.CharField(max_length=50)
def __unicode__(self):
return "Era of " + self.name
class Year(models.Model):
#Year number
value = models.PositiveSmallIntegerField(max_value=9999)
#Era the year belongs to
era = models.ForeignKey('Era')
length = YEAR_LENGTH
def __unicode__(self):
return "Year " + self.value + self.era
class Month(models.Model):
#Should return name of month
value = models.PositiveSmallIntegerField(
choices=MONTH_CHOICES)
#Year that the month fits into
year = models.ForeignKey(Year)
def __unicode__(self):
return self.value " of " + self.year
class Day(models.Model):
#Should give the name of the day
name = models.PositiveSmallIntegerField(
choices = DAY_CHOICES)
#Month that the day belongs to
month = models.ForeignKey('Month')
#Day number, dependant on month length
value = models.PositiveSmallIntegerField(
max_value = month.length)
def __unicode__(self):
return self.name + ", day " + self.value + " of " + self.month
class Hour(models.Model):
value = models.PositiveSmallIntegerField(
max_value = DAY_LENGTH)
day = models.ForeignKey('Day')
def __unicode__(self):
return self.value + ":00, " + self.day
class CurrentTime(models.Model):
hour = ForeignKey('Hour')
day = ForeignKey('Day')
month = ForeignKey('Month')
year = ForeignKey('Year')
era = ForeignKey('Era')
def __unicode__(self): #!!will only work for current config!
return self.hour
我敢肯定这很混乱......但无论如何,请帮我弄清楚我的代码!以及您想给我的任何其他帮助,我也很感激!
【问题讨论】:
-
你想,当你创建
Era,创建9999年行,9999*12月行,~9999*12*30天行,~9999*12*30*24小时行,正确的?您确定要将所有这些都存储在 DB 中吗? -
我认为@DrTyrsa 想说的是您不想将其存储在数据库中。您预计此操作多久发生一次?
-
我真的希望它很少发生。我还没有确定 9999 作为一个确定的数字(它很可能是一个接近 500 的数字)。同样,既然您提到了它,我想我将不得不为所有这些重新定义 delete() 方法,以便它递归地清除所有较低的模型。
-
但是除了将它存储在我的数据库中之外,我真的不确定我会有什么样的选择......
-
@RHH 为什么不使用
DateTimeField?
标签: django django-models model calendar