2016-04-21 8 views
0

Wie ich im Titel sage, muss ich automatisch ein Feld meines Django-Modells ausfüllen, speziell ein DateField, das eine X-Anzahl von Tagen hinzufügt, die ich im selben Modell formuliere.Wie kann ich einem Datetime-Feld eines Django-Modells Tage hinzufügen, indem ich ein IntegerField des gleichen Modells verwende?

In meinem Fall muss ich die Anzahl der Tage hinzufügen, die ich in "total_days" zu dem Datum, das ich verwende, in das Feld "start_day" einfügen und das Ergebnis auf "end_day" speichern. Hier

ist das Modell:

class Certificate(models.Model): 

    employee = models.ForeignKey(Employee) 
    license_type = models.IntegerField(choices=LICENSE_TYPES, default=1) 
    disease_type = models.IntegerField(choices=DESEASE_TYPES, blank=True, null=True) 
    total_days = models.PositiveIntegerField() 
    extra_days = models.PositiveIntegerField(Default=0) 
    start_day = models.DateField() 
    end_day = models.DateField(, editable=False) 
    doctor = models.ForeignKey(Doctor) 
    diagnostic = models.CharField(max_length=150) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    created_by = models.ForeignKey(User, related_name='certificates_created_by', editable=False) 
    modified_by = models.ForeignKey(User, related_name='certificates_modified_by', editable=False, blank=True, null=True) 


    class Meta: 
     verbose_name = "certificado" 
     verbose_name_plural = "certificados" 

    def __str__(self): 
     pass 

Nun, ich versuche mit „Timedelta“ aber ich kann nicht das start_day Feld verwenden, da dies nicht erkennen, wie eine ganze Zahl ist. Und timedelta benötigt einen ganzzahligen Parameter.

Irgendeine Idee darüber, wie ich das tun kann ???

Jetzt mache ich das direkt auf die Ansicht und sende das Ergebnis auf den Kontext der Vorlage. Aber der Benutzer muss dies von Anfang an in der Datenbank behalten.

Vielen Dank!

+0

Zuerst möchten Sie es nicht in Ihrem Modell hinzufügen! Sie müssen eine Funktion erstellen wie: def total_day (self): >>> Anzahl der Tage zurückgeben! – rakwen

+0

Jetzt Wie berechnen Sie den Gesamttag ??? – rakwen

+0

ist keine berechnung das stelle ich manuell in die form! ist ein Arzt-Zertifikat, wie viele Tage der Erholung er einer Person gibt. Ich muss diese Anzahl von Tagen in das Formular eintragen (wenn der Arzt 4 Tage Ruhe gibt, gebe ich diese Zahl an total_days ein). – marcosgue

Antwort

2

Sie können die Funktion get_end_date erstellen, an die Sie das Startdatum als Parameter übergeben können. entsprechend Ihrer Codierung Bequemlichkeit.

from datetime import datetime, timedelta 
start_date = datetime.strptime(start_day, "FORMAT") #start_day should be from your model and FORMAT as it is 
end_day = start_date + timedelta(days=no_of_days_to_add) 
end_date = end_day.strftime(end_day, <FORMAT>) 
+0

Ja, aber ich muss das Enddatum speichern, wenn ich ein neues Objekt erstelle. In dem Formular muss ich den Starttag und die Total_days setzen und wenn ich sparen! ich brauche, dass der end_day automatisch den richtigen Wert (start_day + total_days) im DB speichert. – marcosgue

+0

Bei der Verarbeitung Ihres Formulars können Sie die Funktion aufrufen, indem Sie das Startdatum und die Gesamtzahl der Tage aus dem Formularwert als Variable und der Funktion als Enddatum übergeben. Dann können Sie den Wert in der Datenbank speichern. Hoffe das klärt auf. –

+0

Oh ja, ich habe so etwas auf meiner erstellen Ansicht gemacht. aber wenn ich das Admin-Panel benutze das nicht funktioniert. – marcosgue

Verwandte Themen