django汽车入门一代

时间:2009-08-16 17:19:07

标签: python django django-models scripting

每当我触发它时,我都会尝试使用Django生成自动数据库条目。

例如,假设我有这样的模型:

class status_entry(models.Model):
    name = models.TextField()
    date = models.DateField()
    status = models.BooleanField()

我有几个模型条目,如:

1 - "bla bla" - 2009/11/6 - true
2 - "bla bla" - 2009/11/7 - true
3 - "bla bla" - 2009/11/10 - true

因此,您可以看到我的第2和第3个参赛作品,我有2个缺席参赛日(2009/11/8和2009/11/9),通过创建我想要的一些视图或脚本 自动填写这些缺席的日期条目,例如:

id   name        date       status 
------------------------------------
1 - "bla bla" - 2009/11/6 - true
2 - "bla bla" - 2009/11/7 - true
3 - "bla bla" - 2009/11/8 - false
4 - "bla bla" - 2009/11/9 - false
5 - "bla bla" - 2009/11/10 - true

谢谢

1 个答案:

答案 0 :(得分:0)

您可以覆盖save并在那里执行自动填充(daterange功能取自here):

from datetime import timedelta

def daterange(start_date, end_date):
    for n in range((end_date - start_date).days):
        yield start_date + timedelta(n)


class StatusEntry(models.Model):
    name = models.TextField()
    date = models.DateField()
    status = models.BooleanField()

    def __unicode__(self):
        return "%s - %s - %s" % (self.name, unicode(self.status), unicode(self.date))

    def save(self, fill=True):
        if fill and not self.id: # autofill on insert, not on update
            newest = StatusEntry.objects.all().order_by("-date")[:1]
            if newest and newest[0].date < self.date:
                for date in daterange(newest[0].date + timedelta(1), self.date):
                    entry = StatusEntry(name=self.name, date=date, status=False)
                    entry.save(fill=False)
        super(StatusEntry, self).save()

你也可以使用signals或者使用触发器,例如hughdbrown建议