2009-08-16 14 views
0

Ich versuche eine automatisierte Datenbankeintragsgenerierung mit Django zu machen, wann immer ich es auslöst.django auto entry generation

Zum Beispiel gehe ich davon ein solches Modell haben:

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

und ich habe mehrere Einträge in das Modell wie:

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

so, wie Sie zwischen meinem 2. und 3. Eintrag sehen können , Ich habe 2 abwesende Eintrittstage (2009/11/8 und 2009/11/9), über das Erstellen einer Ansicht oder eines Skripts möchte ich automatisch diese abwesenden Tageinträge füllen wie:

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 

Dank

+0

So vorgeschlagen Was genau ist das Problem? Wo hast du Probleme? –

+0

Was ist die Spezifikation? Wenn Sie die Plätze 6 und 7 in Ihrer Datenbank haben und Sie anschließend den 10. Platz haben, möchten Sie, dass der 8. und der 9. Platz gefüllt wird (aber mit anderen Werten)? Klingt wie ein Datenbank-Trigger, kein Django-Problem. – hughdbrown

+0

Das Problem ist die Entscheidung, wie ich meine Idee der automatischen Generierung dieser Tabellenzeilen umsetzen kann :) Es ist das erste Mal, dass ich einem solchen Problem gegenüberstehe und deshalb wäre die Methode schlauer (durch Django oder durch einen DB Trigger) – Hellnar

Antwort

0

Sie können save überschreiben und die Autofill tun es (daterange aus here genommen Funktion):

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() 

Sie auch signals nutzen könnten oder tun es mit Triggern, wie hughdbrown

+0

vielen Dank dass du dir Zeit genommen hast! – Hellnar

Verwandte Themen