2009-08-16 3 views
0

Я пытаюсь создать автоматическое создание записей в базе данных с Django, когда я его запускаю.django auto entry generation

Например, предположим, что у меня есть такая модель:

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 

Благодаря

+0

Так в чем именно проблема? Где у вас проблемы? –

+0

В чем спецификация? Если у вас есть 6-е и 7-е место в вашей базе данных, а затем вы 10-го числа, вы хотите, чтобы 8-я и 9-я были заполнены (но с разными значениями)? Звучит как триггер базы данных, а не проблема Django. – hughdbrown

+0

Проблема заключается в том, как реализовать мою идею автогенерации этих строк в таблице :) Это мой первый раз, столкнувшись с такой проблемой, и именно поэтому какой метод будет более умным (с помощью django или через какой-то триггер DB) – Hellnar

ответ

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 предложил

+0

спасибо alot за ваше время! – Hellnar

Смежные вопросы