2009-08-16 75 views
0

我試圖使用Django自動生成數據庫條目,只要我觸發它就會發生。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個缺席日(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 

感謝

+0

所以究竟是什麼問題?你在哪裏遇到麻煩? – 2009-08-16 17:24:56

+0

規格是什麼?如果你的數據庫中有第6和第7名,並且隨後又是第10名,那麼你需要回填第8和第9名(但使用不同的值)?聽起來像是數據庫觸發器,而不是Django問題。 – hughdbrown 2009-08-16 17:28:13

+0

麻煩的是如何實現我的這些錶行的自動生成的想法的決定:)這是我第一次面對這樣的問題,這就是爲什麼什麼方法會更聰明(通過Django的或通過一些數據庫觸發器) – Hellnar 2009-08-16 17:34:44

回答

0

您可以覆蓋save並執行自動填充有(從here採取daterange功能):

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建議

+0

非常感謝花時間! – Hellnar 2009-08-16 18:29:50