2014-10-18 3 views
2

Я не могу добавить виджет администратора в моей форме. Как это сделать?django admin datetime widget (calendar) в пользовательской форме

model.py

from django.db import models 
from django.contrib.auth.models import User 


FIELDNUM = (('1', '1'), ('2', '2'), ('3', '3'), 
      ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), 
      ('9', '9'), ('10', '10')) 

FIELDNAMES = (('test', 'test'), ('kostas', 'kostas'), ('kaka', 'kaka')) 

class Reservation(models.Model): 
    field_name = models.CharField("Field Name*", choices=FIELDNAMES, max_length=100) 
    fieldnum = models.CharField("Field Number*", choices=FIELDNUM, max_length=2) 
    date = models.DateField("Date*") 
    time = models.TimeField("Time*") 
    user = models.ForeignKey(User) 
    date_time = models.DateTimeField(auto_now_add=True, blank=True, unique=False) 

    def __unicode__(self): 
     return '%s, %s, %s, %s' % (self.field_name, self.date, self.time, self.date_time) 

    class Meta: 
     unique_together = ("field_name", "fieldnum", "date", "time") 

form.py

from django import forms 
from booking.models import Reservation 

class ReservationForm(forms.ModelForm): 
    class Meta: 
     model = Reservation 
     exclude = ['user'] 

я вынес свою форму в качестве пункта в моем шаблоне.

Где позвонить и как установить его в моем шаблоне, чтобы он работал?

+1

возможно [дубликат] (http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form) –

ответ

1

Я думаю, что самый простой способ - не использовать виджет от django.contrib.admin.widgets, а скорее виджет третьей стороны, такой как Datepicker из jQuery UI.

Все, что вам нужно сделать, это включить jQuery UI в шаблоне и добавить этот скрипт

<script> 
    $(function() { 
    $(".date_picker").datepicker(); 
    }); 
</script> 

.date_picker Где это название класса формы ввода, связанные с date области вашей Reservation модели.

Для того, чтобы Django добавил этот class='date_picker' к сгенерированному вводу формы, связанному с date, вы должны слегка изменить свой ModelForm. Более конкретно,

from django import forms 
from booking.models import Reservation 

class ReservationForm(forms.ModelForm): 
    class Meta: 
     model = Reservation 
     exclude = ['user'] 
     widgets = { 
      'date' : forms.DateInput(attrs={'class' : 'date_picker'}) 
     } 

Это будет иметь эффект рендеринга <input type='text' ... class='date_picker' /> при вызове {{ form.as_p }} в шаблоне, и JQuery UI делает все остальное.

Кстати, небольшое улучшение вашего models.py будет заключаться в использовании понимания списка python. А именно

FIELDNUM = (('1', '1'), ('2', '2'), ('3', '3'), 
     ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), 
     ('9', '9'), ('10', '10')) 

эквивалентно

FIELDNUM = [(str(i), str(i)) for i in range(1,11)] 
+0

извините, но я не понял. можете ли вы объяснить, как использовать это в моем шаблоне, когда я делаю свою форму вроде этого? code?

{% csrf_token%} {{form.as_p }}
kostas1987

+0

извините, но я не понял. можете ли вы объяснить, как использовать это в моем шаблоне, когда я делаю свою форму следующим образом:

{% csrf_token%} {{form.as_p}} <тип кнопки = "submit" class = "btn btn-success" value = "submit"> Post
kostas1987

+1

Я сделал то, что вы предложили, но я не получаю datepicker в своей форме – kostas1987

Смежные вопросы