2013-03-26 15 views
9

Quando si utilizza DateTimeField in ModelForm s, sembrano campi di testo. Come posso renderli simili all'amministratore? (Quando vado al admin e aggiungo uno spettacolo che vedo i campi come campi data)Campo DateTime in modello Django

# models.py 
class Show(models.Model): 
    ... 
    start_time = models.DateTimeField("Event Time") 
    sale_end_time = models.DateTimeField("Sale End Time") 

class ShowForm(ModelForm): 

    class Meta: 
     model = Show 

# views.py 
def createshow(request): 
    if request.method == 'POST': 
     form = ShowForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/showsaved') 
    else: 
     form = ShowForm() 
     return render(request, 'BizCreateShow.html', {'ShowForm' : form}) 

Nel modello:

<form class="form-horizontal well" action="" method="post"> 
{% csrf_token %} 
    {{ ShowForm }} </br> 
    <input type="submit" value="Submit"> 
</form> 

risposta

9

Si può fare questo con i widget Django. È molto semplice e facile da implementare. Qui sotto ci sono i dettagli su come puoi usare questo usando i widget.

in forms.py

class ShowForm(ModelForm): 
    class Meta: 
     model = Show 
    def __init__(self, *args, **kwargs): 
     super(ShowForm, self).__init__(*args, **kwargs) 
     self.fields['start_time'].widget = widgets.AdminSplitDateTime() 
     self.fields['sale_end_time'].widget = widgets.AdminSplitDateTime() 

in modello

<script type="text/javascript" src="/my_admin/jsi18n/"></script> 
<script type="text/javascript" src="/media/admin/js/core.js"></script> 

<link rel="stylesheet" type="text/css" href="/media/admin/css/forms.css"/> 
<link rel="stylesheet" type="text/css" href="/media/admin/css/base.css"/> 
<link rel="stylesheet" type="text/css" href="/media/admin/css/global.css"/> 
<link rel="stylesheet" type="text/css" href="/media/admin/css/widgets.css"/> 

This is it. Per favore fatemi sapere se non sono molto chiaro. O stai affrontando qualsiasi errore in esso.

+0

Grazie, quando provo che ottengo un errore: "variabile non definita: widget" su questa linea: self.fields [ 'start_time']. widget = widgets.AdminSplitDateTime() – misschoksondik

+4

prova questo "da django.contrib.admin import widget" potrebbe risolvere il tuo problema. –

+1

Si noti che in 1.4+ si chiamano i file statici in modo diverso: http://stackoverflow.com/a/15292176/1863061 – Laci

3

Probabilmente si dovrebbe usare qualcosa di simile jQuery UI di datepicker widget:

The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.

+0

Grazie! ma come posso fornire al campo di input una classe o un ID da utilizzare nel javascript se il modulo viene generato nel modello? – misschoksondik

+0

Inoltre, ho bisogno del tempo nello stesso campo, no? Mi consente solo di selezionare la data. – misschoksondik

+0

Ok, ho usato $ ("form input [nome = 'start_time']"). Click (function() { $ ("form input [nome = 'start_time']"). Datepicker(); }); – misschoksondik

Problemi correlati