【问题标题】:django admin datetime widget (calendar) in a custom form自定义表单中的 django admin datetime 小部件(日历)
【发布时间】:2014-10-18 17:59:46
【问题描述】:

我无法在我的表单中添加管理日历小部件。怎么做?

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']

我将表单呈现为模板中的段落。

在哪里调用小部件以及如何在我的模板中设置它以使其工作?

【问题讨论】:

标签: python django calendar widget


【解决方案1】:

我认为最简单的方法不是使用来自 django.contrib.admin.widgets 的小部件,而是使用第三方小部件,例如来自 jQuery UI 的 Datepicker

您所要做的就是在您的模板中包含jQuery UI 并添加此脚本

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

其中.date_picker 是与Reservation 模型的date 字段相关的表单输入类的名称。

为了让 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'})
        }

当您在模板中调用 {{ form.as_p }} 时,这将产生渲染 &lt;input type='text' ... class='date_picker' /&gt; 的效果,其余的由 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)]

【讨论】:

  • 对不起,我没听懂。当我像'code'
    {% csrf_token %} {{ form.as_p }}
  • 对不起,我没听懂。当我像这样呈现我的表单时,你能解释一下如何在我的模板中使用它
    {% csrf_token %} {{ form.as_p }}
  • 我按照你的建议做了,但我的表单中没有日期选择器
猜你喜欢
  • 2011-07-23
  • 2011-03-29
  • 1970-01-01
  • 2012-03-28
  • 2013-04-03
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2012-07-18
相关资源
最近更新 更多