3

モデルにDateTimeフィールドがあり、フォームで見栄えを良くする簡単な方法を探しています。のようなものSelectDateWidget

私は同様の質問をたくさん見てきましたが、管理者の日付ピッカーやjqueryのようなものを機能させるのは本当に難しいようです. (Django を使用するのはこれが初めてで、jquery を使用したことはありません)。

したがって、このChoiceField例の代わりにを使用していますが、動作させることもできません。エラー名'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("")
4

2 に答える 2

7

フォーム.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>
于 2013-03-08T10:45:46.770 に答える
2

エラーで立ち往生している場合

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' 
于 2016-04-21T14:57:10.237 に答える