2011-05-07 12 views
7

Tengo un modelo que representa una orden de trabajo. Uno de los campos es un DateField y representa la fecha en que se creó la orden de trabajo (acertadamente llamada: dateWOCreated). Cuando el usuario crea una nueva orden de trabajo, quiero que este campo dateWOCreated se rellene automáticamente con la fecha de hoy y luego se muestre en la plantilla. Tengo algunos otros campos que quiero establecer sin la intervención del usuario, pero debo mostrar estos valores al usuario en la plantilla.Formularios Django: establezca valores de campo en la vista

No quiero simplemente excluir estos campos de la clase modelForm porque puede haber una necesidad para que el usuario pueda editar estos valores más adelante.

¿Algún ayuda?

Gracias

Respuesta

6

Al definir su modelo, se puede establecer un default para cada campo. El objeto predeterminado puede ser invocable. Para su campo dateWOCreated podemos usar elllamable.

# models.py 
from datetime import date 

class WorkOrder(models.Model): 
    ... 
    dateWOCreated = models.DateField(default=date.today) 

para mostrar fechas en el formato MM/DD/YYYY, se debe redefinir el widget en su modelo de formulario.

from django import forms 
class WorkOrderModelForm(forms.ModelForm): 
    class Meta: 
     model = WorkOrder 
     widgets = { 
      'dateWOCreated': forms.DateInput(format="%m/%d/%Y")), 
     } 

En formas y formas del modelo, el análogo para el argumento predeterminado es inicial. Para otros campos, puede que necesite calcular dinámicamente el valor del campo inicial en la vista. He puesto un ejemplo a continuación. Vea el Django Docs for Dynamic Initial Values para más información.

# views.py 
class WorkOrderModelForm(forms.ModelForm): 
    class Meta: 
     model = WorkOrder 

def my_view(request, *args, **kwargs): 
    other_field_inital = 'foo' # FIXME calculate the initial value here 
    form = MyModelForm(initial={'other_field': 'other_field_initial'}) 
    ... 
+0

Dulzura, parece que va a funcionar para mí. Sin embargo, tengo una pregunta de seguimiento. Si uso el método default = date.today, dará un valor de YYYY-MM-DD. Necesito cambiar esto a MM/DD/YYYY. Probé date.today(). Strftime (% m \ /% d \ /% Y) pero a django no le gusta esto. ¿Algunas ideas? – Garfonzo

+0

No importa, Django está bien con mi formato YYYY-MM-DD. ¡Gracias! – Garfonzo

Cuestiones relacionadas