【问题标题】:DateTime field in Django form modelDjango 表单模型中的 DateTime 字段
【发布时间】:2013-03-26 16:58:18
【问题描述】:

ModelForms 中使用DateTimeField 时,它们看起来像文本字段。我怎样才能让它们在管理员中看起来像? (当我去管理员并添加一个节目时,我将这些字段视为日期字段)

# 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})

在模板中:

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

【问题讨论】:

    标签: django datetime django-models django-forms


    【解决方案1】:

    您可以使用 django 小部件来做到这一点。它非常简单且易于实施。下面是如何使用小部件的详细信息。

    forms.py

    from django.contrib.admin import widgets
    
    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()
    

    模板

    <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"/>
    

    就是这样。如果我不太清楚,请告诉我。或者你遇到了任何错误。

    【讨论】:

    • 谢谢,当我尝试时我得到一个错误:“未定义变量:小部件”在这一行:self.fields['start_time'].widget = widgets.AdminSplitDateTime()
    • 试试这个“从 django.contrib.admin 导入小部件”可能会解决你的问题。
    • 请注意,在 1.4+ 中,您对静态文件的调用方式不同:stackoverflow.com/a/15292176/1863061
    【解决方案2】:

    您可能应该使用类似 jQuery UI 的 datepicker widget:

    日期选择器与标准表单输入字段相关联。专注于 输入(单击或使用 Tab 键)以在 小覆盖。选择一个日期,点击页面上的其他地方(模糊 输入),或按 Esc 键关闭。如果选择了日期,则反馈是 显示为输入的值。

    【讨论】:

    • 谢谢!但是如果表单在模型中生成,我怎样才能给输入字段一个类或 ID 以在 javascript 中使用?
    • 另外,我需要在同一领域的时间,不是吗?它只让我选择日期。
    • 好的,我用 $("form input[name='start_time']").click(function () { $("form input[name='start_time']").datepicker( ); });
    • 需要说明的是,这种方法在formsets中是行不通的。
    猜你喜欢
    • 2020-11-30
    • 2020-03-30
    • 2012-03-02
    • 2013-08-27
    • 2010-11-11
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    相关资源
    最近更新 更多