2011-05-07 15 views
7

Bir iş siparişini temsil eden bir modelim var. Alanlardan biri bir DateField'dır ve iş emrinin yaratıldığı tarihi gösterir (uygun şekilde adlandırılmış: dateWOCreated). Kullanıcı yeni bir iş emri oluşturduğunda, bu tarihi istiyorumWOCreated alanın otomatik olarak bugünün tarihiyle doldurulup şablonda görüntülenmesini istiyorum. Kullanıcının müdahalesi olmadan ayarlamak istediğim birkaç alanım var ama bu değerleri şablonda kullanıcıya göstermeliyim.Django Formları - ayarlanan alan değerleri görünümü

Bu alanları modelForm sınıfından hariç tutmak istemiyorum çünkü kullanıcının bu değerleri yoldan düzenleyebilmesi gerekebilir.

Herhangi bir yardım?

Teşekkür

cevap

6

modelinizi tanımlarken, her bir alana ait bir default ayarlayabilirsiniz. Varsayılan nesne, bir satır olabilir. dateWOCreated alanınız için, date.today numaralı callable'ı kullanabiliriz.

# models.py 
from datetime import date 

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

formatında MM/DD/YYYY tarihleri ​​görüntülemek için, modeli şeklinde widget'ı geçersiz kılmak gerekir.

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

Formlarda ve model formlarında, varsayılan argüman için analog başlangıçtır. Diğer alanlar için, görünümdeki başlangıç ​​alan değerini dinamik olarak hesaplamanız gerekebilir. Aşağıda bir örnek verdim. Daha fazla bilgi için Django Docs for Dynamic Initial Values'a bakı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

Tatlılık, bu benim için çalışacak gibi görünüyor. Ancak, bir takip sorumlum var. Default = date.today yöntemini kullanırsam YYYY-AA-GG değerini verir. Bunu MM/DD/YYYY olarak değiştirmem gerekiyor. Date.today(). Strftime (% m \ /% d \ /% Y) denedim ancak django bunu sevmiyor. Herhangi bir fikir? – Garfonzo

+0

Nevermind, Django, YYYY-AA-DD biçimlendirmemle tamam. Teşekkürler! – Garfonzo