2011-03-30 10 views
5

quiero fijar la fecha inicial de ayer en una Django formar mi código está aquí:Ajuste de ayer como la fecha inicial en un formulario de Django

class Bilag(models.Model): 
dato = models.DateField() 
tekst = models.CharField(max_length=100) 
konto = models.CharField(max_length=10) 
avd = models.CharField(max_length=10, null=True,blank=True) 
avdnavn = models.CharField(max_length=30, null=True,blank=True) 
kasseid = models.CharField(max_length=10) 
belop = models.FloatField() 
def __unicode__(self): 
    return self.tekst 

class BilagForm(ModelForm): 
class Meta: 
    model = Bilag 
    widgets = { 
     'dato': SelectDateWidget() 
    } 
    initial = { 
     'dato': yesterday() 
    } 

y la función de ayer:

def yesterday(): 
    yesterday = (datetime.date.today() - datetime.timedelta(1)) 
    return yesterday 

Pero simplemente muestra la fecha de hoy cuando miro el formulario

Respuesta

6

Puede establecer el valor inicial en el ModelField, aunque luego se llamaría default. Asumo que sólo desea hacerlo en el formulario, en cuyo caso se necesitaría algo así como:

class BilagForm(forms.ModelForm): 
    dato = forms.DateField(widget=SelectDateWidget(), initial=yesterday) 
    class Meta: 
     model = Bilag 

No olvide que usted no puede incluir los paréntesis después de yesterday - sólo tiene que pasar la exigible, de lo contrario, yesterday() se evaluará inmediatamente y no será dinámico (consulte la parte inferior de this section).

+0

Gracias, eso funcionó – Kracobsen

0

Creo que define la inicial en el lugar equivocado (class Meta).

Según mi entender, se debe establecer como un parámetro del campo para el que está intentando establecer el valor inicial.

Verificar los documentos: http://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.Field.initial

Otra opción sería utilizar el parámetro del campo default en la definición del modelo. Vea este hilo para obtener inspiración: Django datetime issues (default=datetime.now())

Cuestiones relacionadas