【问题标题】:Django DateTimeField input FormDjango DateTimeField 输入表单
【发布时间】:2013-03-08 10:31:01
【问题描述】:

我的模型中有一个DateTime 字段,我正在寻找一种简单的方法让它在表单中看起来不错。类似于SelectDateWidget。

我一直在研究很多类似的问题,让管理员 datepicker 或 jquery 之类的东西工作似乎真的很棘手。 (这是我第一次使用Django,之前从未使用过jquery)。

所以,我使用 ChoiceField 代替 this 示例,但我也无法让它工作。我得到错误名称 'self' is not defined。我不能在这里使用self 吗?还是有更好的简单方法来做到这一点?我不需要花哨的日期选择器,只需要让用户轻松输入的东西。

class ProjectForm(ModelForm):
    startdate = forms.DateField()
    starthour = forms.ChoiceField(choices=((6,"6am"),(7,"7am"),(8,"8am"),(9,"9am"), ...))
    startminute = forms.ChoiceField(choices=((0,":00"),(15,":15"),(30,":30"),(45,":45")))

    class Meta:
        model = Project

    def clean(self):
        starttime = time(int(self.cleaned_data.get('starthour')), 
                         int(self.cleaned_data.get('startminute')))
        return self.cleaned_data

    try:
        self.instance.start_time = datetime.datetime.combine(
            self.cleaned_data.get("startdate"), starttime)
    except TypeError:
        raise forms.ValidationError("")

【问题讨论】:

  • Youy try 块应该在“清洁”功能下。

标签: django datetime


【解决方案1】:

如果你遇到错误

Could not parse the remainder: '/js/jquery.init.js'' from 'admin/js/jquery.init.js''". 

只需在admin/js/jquery.init.js 之前添加一个撇号即可 它看起来像:

'admin/js/jquery.init.js' 

【讨论】:

    【解决方案2】:

    forms.py

    from django import forms
    from django.contrib.admin import widgets                                       
    
    class MyForm(forms.ModelForm):
        class Meta:
            model = MyModel
    
        def __init__(self, *args, **kwargs):
            super(MyForm, self).__init__(*args, **kwargs)
            self.fields['mydate'].widget = widgets.AdminDateWidget()
            self.fields['mytime'].widget = widgets.AdminTimeWidget()
            self.fields['mydatetime'].widget = widgets.AdminSplitDateTime()
    

    在模板中:

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

    …或者,对于 Django 1.4+:

    {% load static %}
    
    <link rel="stylesheet" type="text/css" 
        href="{% static 'admin/css/forms.css' %} "/>
    <link rel="stylesheet" type="text/css" 
        href="{% static 'admin/css/base.css' %} "/>
    <link rel="stylesheet" type="text/css" 
        href="{% static 'admin/css/global.css' %}"/>
    <link rel="stylesheet" type="text/css" 
        href="{% static 'admin/css/widgets.css' %}"/>
    
    <script type="text/javascript" 
        src="/admin/jsi18n/"></script>
    <script type="text/javascript" 
        src="{% static 'admin/js/core.js' %}"></script>
    <script type="text/javascript" 
        src="{% static 'admin/js/admin/RelatedObjectLookups.js' %}"></script>
    <script type="text/javascript" 
        src="{% static 'admin/js/jquery.js' %}"></script>
    <script type="text/javascript" 
        src="{% static 'admin/js/jquery.init.js' %}"></script>
    <script type="text/javascript" 
        src="{% static 'admin/js/actions.js' %}"></script>
    <script type="text/javascript" 
        src="{% static 'admin/js/calendar.js' %}"></script>
    <script type="text/javascript" 
        src="{% static 'admin/js/admin/DateTimeShortcuts.js' %}"></script>
    

    【讨论】:

    • 谢谢!但我得到错误“自我”没有定义。而且我没有forms.py,我有models.py里的form,有关系吗?
    • 我是否必须有一个日期和时间字段,或者我可以只有一个字段形式的日期时间?
    • 如果你只想使用日期时间,没关系,其他只是例子
    • 请在您遇到错误的问题中发布您的代码
    • 没关系,它会起作用,但对于 django 实践来说,你做的是不好的做法
    猜你喜欢
    • 2014-12-30
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2018-05-25
    • 2012-02-13
    相关资源
    最近更新 更多