Django模型中类似涂鸦的功能?

时间:2012-11-22 20:00:55

标签: django

我想允许用户在一周的7天中的任何一天中为三个时段中的任何一个提供他的可用性。

这样做的蛮力方法是简单地提供21个复选框,所以

MONDAY_AM = models.BooleanField()
MONDAY_NOON = models.BooleanField()
...
SUNDAY_PM = models.BooleanField()

然而这似乎很愚蠢。如果我想回忆所有的星期一或整个晚上怎么办?它似乎不会很好地扩展。

我想要一种更复杂的方法,理想情况下允许我将这些模型注册到Django的管理员,这样我就能以表格形式看到每个用户的可用性,例如

     |Mo Tu We Th Fr Sa Su
AM   | x  x
NOON |       x  x     x  x
PM   |       x        x  x

任何帮助都会非常感激(是的,到目前为止,涂鸦大大超过了我的功能,但是1.它是一个学习项目,2。我打算将它带向另一个方向)

编辑:BTW,来自Python和Qt等等,我的初始方法是嵌套for循环和字典,但South和Django似乎不喜欢这样。我需要更多地考虑“类似数据库”,所以不要害怕提交几乎无关紧要的东西。这可能就是我需要的,真的。

1 个答案:

答案 0 :(得分:1)

过去我也需要这个功能。其中Teacher必须在任何一天定义其可用时间,所以我想出了这个模型:

class Availability(models.Model):
    WEEKDAY_CHOICES = (
        (0, 'Monday'),
        (1, 'Tuesday'),
        (2, 'Wednesday'),
        (3, 'Thursday'),
        (4, 'Friday'),
        (5, 'Saturday'),
        (6, 'Sunday'),
    )
    id = models.AutoField(primary_key=True)
    teacher = models.ForeignKey(Teacher)
    weekday = models.PositiveSmallIntegerField(choices=WEEKDAY_CHOICES)
    start_time = models.TimeField(null=True, blank=True)
    end_time = models.TimeField(null=True, blank=True)

    class Meta:
        db_table = 'availability'
        unique_together = ("teacher", "weekday")

我希望这会帮助你到达某个地方。