質問

どうやって使うことができまnifty JavaScriptの日時にウィジェットのデフォルトの管理者用とカスタムビュー?

していました のDjango書文書, で簡単につdjango.contrib.admin.ウィジェットがわからないこれには数日かかるでしょう。

ここでは私のテンプレートをしたいのです。

<form action="." method="POST">
    <table>
        {% for f in form %}
           <tr> <td> {{ f.name }}</td> <td>{{ f }}</td> </tr>
        {% endfor %}
    </table>
    <input type="submit" name="submit" value="Add Product">
</form>

もうこんなにも記述は、バランスのとっこの用紙を使用してい汎用。こちらからurl.py:

(r'^admin/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}),

私り扱いの全Django/MVC/MTVことで行ってください。

役に立ちましたか?

解決

の複雑さのこの答えは時とともに、多くのhacks、あるべき注意してくださいとのことです。頼ってい非正規滞在の内部実装の詳細は管理者がブレイクが期待されるもの将来のバージョンDjangoではなく実施だけではな発見もJSカレンダーウィジェットを使用。

とはいえ、こだまのためにはこの作品:

  1. 独自に定義すModelFormサブクラスモデル(ベストですforms.py ディア)の伝のなかで活用することができるAdminDateWidget/AdminTimeWidget/AdminSplitDateTime('mydate"などの適切なフィールド名のフィールドからモデル):

    from django import forms
    from my_app.models import Product
    from django.contrib.admin import widgets                                       
    
    class ProductForm(forms.ModelForm):
        class Meta:
            model = Product
        def __init__(self, *args, **kwargs):
            super(ProductForm, self).__init__(*args, **kwargs)
            self.fields['mydate'].widget = widgets.AdminDateWidget()
            self.fields['mytime'].widget = widgets.AdminTimeWidget()
            self.fields['mydatetime'].widget = widgets.AdminSplitDateTime()
    
  2. 変更URLconfへのパス'form_class':ProductFormく"モデル:製品の汎用create_objectビュー(だんからmy_app.形態輸入ProductForm"の代わりに"からmy_app.モデルの輸入品"のコースを受講した。

  3. のヘッドのテンプレートは、{{ます。メディア}}出力へのリンクにJavascriptファイルです。

  4. のhacky部admin日付/時刻のウィジェットが困難になることも想定し、i18n JSもロードされ、必要とcore.jsですから。そこでテンプレート上{{ます。メディア}}できます。:

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

    また、利用を希望する、以下の管理CSS(感謝 アレックス のための言):

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

これはDjangoの管理者のメディア(ADMIN_MEDIA_PREFIX)/メディア/admin/-変更ができますことをご設定します。理想的にはん用のコンテキストプロセッサーをこの値テンプレートの代わりにhardcodingで、その範囲を超えてこの質問です。

このものURL/my_admin/jsi18n/手作業で有線のdjango.ます。i18n.javascript_catalogビュー(or null_javascript_catalogでない場合に使I18N).いことだなと思う、今日この頃なので管理者に申請でアクセスの有無にかかわらずログインし、管理者(ありがとうござ Jeremy ポインティングこしています。サンプルコードおURLconf:

(r'^my_admin/jsi18n', 'django.views.i18n.javascript_catalog'),

最後に、ご利用の場合はDjango1.2以降を使用し必要な追加のコードテンプレートにウィジェットを見つメディア:

{% load adminmedia %} /* At the top of the template. */

/* In the head section of the template. */
<script type="text/javascript">
window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
</script>

感謝 lupefiasco このた.

他のヒント

として、ソリューションがhackishと思うので、自分の日付/時間にウィジェットとはJavaScriptが可能です。

ヴ績を上書きする/admin/jsi18n/url。

こういっurls.py.してください上記の/admin/url

    (r'^admin/jsi18n', i18n_javascript),

こちらはi18n_javascript機能しを作成します。

from django.contrib import admin
def i18n_javascript(request):
  return admin.site.i18n_javascript(request)

私の頭のコード1.4バージョン(一部除く)

{% block extrahead %}

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/forms.css"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/base.css"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/global.css"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/widgets.css"/>

<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/core.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.init.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/actions.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/calendar.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/admin/DateTimeShortcuts.js"></script>

{% endblock %}

私が参照この後、この 文書 を定義する 少し 少hackyをオーバーライドのデフォルトウィジェット.

(必要なオーバーライドのModelFormの__init__方法)

しかし、まだマ線おJSやCSSを適切にしてカール-つ.

forms.py

from django import forms
from my_app.models import Product
from django.contrib.admin import widgets                                       


class ProductForm(forms.ModelForm):
    mydate = forms.DateField(widget=widgets.AdminDateWidget)
    mytime = forms.TimeField(widget=widgets.AdminTimeWidget)
    mydatetime = forms.SplitDateTimeField(widget=widgets.AdminSplitDateTime)

    class Meta:
        model = Product

参考 分野の種類 のデフォルト形式ます。

からDjango1.2RC1を使用している場合、Djangoの管理者の日付ピッカー widgeトリックは以下の通りで追加するテンプレート、あなたはカレンダーアイコンのurlを参照しているよ"となった-管理-メディアプレフィックス/".

{% load adminmedia %} /* At the top of the template. */

/* In the head section of the template. */
<script type="text/javascript">
window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
</script>

補完としての回答によるカール-マイヤー、コメントする必要がありそのヘッダーの一部で有効なブロック内部のヘッダー)内のテンプレートを作成します。

{% block extra_head %}

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

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

{{ form.media }}

{% endblock %}

以下のもの作業としての最後のリゾートされている場合には失敗した

class PaymentsForm(forms.ModelForm):
    class Meta:
        model = Payments

    def __init__(self, *args, **kwargs):
        super(PaymentsForm, self).__init__(*args, **kwargs)
        self.fields['date'].widget = SelectDateWidget()

と同じ

class PaymentsForm(forms.ModelForm):
    date = forms.DateField(widget=SelectDateWidget())

    class Meta:
        model = Payments

の取組みなどについて、お話をおforms.py from django.forms.extras.widgets import SelectDateWidget

今だけの割り当クラスをウィジェットを結合するクラスのJQuery datepicker"を持つ?

Django forms.py:

class MyForm(forms.ModelForm):

  class Meta:
    model = MyModel

  def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['my_date_field'].widget.attrs['class'] = 'datepicker'

一部JavaScriptのテンプレート:

  $(".datepicker").datepicker();

のためのDjango>=2.0

注意:使用管理ウィジェットのための日-時間分野では良いアイデアとしてのadmin(管理者スタイルシートできる紛争とサイトスタイルシートを使用しているケースでは、ブートストラップその他のCSSの枠組みの場合は館のサイトにブートストラップを使用私のブートストラップ-datepicker"を持つウィジェット django-ブートストラップ-datepicker"を持つプラス.

ステップ1: 追加 javascript-catalog URLプロジェクト(アプリ) urls.py ファイルです。

from django.views.i18n import JavaScriptCatalog

urlpatterns = [
    path('jsi18n', JavaScriptCatalog.as_view(), name='javascript-catalog'),
]

ステップ2: 追加要JavaScript、CSSの資源をテンプレートを作成します。

<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
<script type="text/javascript" src="{% static '/admin/js/core.js' %}"></script>
<link rel="stylesheet" type="text/css" href="{% static '/admin/css/widgets.css' %}">
<style>.calendar>table>caption{caption-side:unset}</style><!--caption fix for bootstrap4-->
{{ form.media }}        {# Form required JS and CSS #}

ステップ3: 管理者用ウィジェットを日付/時刻入力分野にお forms.py.

from django.contrib.admin import widgets
from .models import Product

class ProductCreateForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ['name', 'publish_date', 'publish_time', 'publish_datetime']
        widgets = {
            'publish_date': widgets.AdminDateWidget,
            'publish_time': widgets.AdminTimeWidget,
            'publish_datetime': widgets.AdminSplitDateTime,
        }

更新液への対処 SplitDateTime必要な=False:

forms.py

from django import forms

class SplitDateTimeJSField(forms.SplitDateTimeField):
    def __init__(self, *args, **kwargs):
        super(SplitDateTimeJSField, self).__init__(*args, **kwargs)
        self.widget.widgets[0].attrs = {'class': 'vDateField'}
        self.widget.widgets[1].attrs = {'class': 'vTimeField'}  


class AnyFormOrModelForm(forms.Form):
    date = forms.DateField(widget=forms.TextInput(attrs={'class':'vDateField'}))
    time = forms.TimeField(widget=forms.TextInput(attrs={'class':'vTimeField'}))
    timestamp = SplitDateTimeJSField(required=False,)

form.html

<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="/admin_media/js/core.js"></script>
<script type="text/javascript" src="/admin_media/js/calendar.js"></script>
<script type="text/javascript" src="/admin_media/js/admin/DateTimeShortcuts.js"></script>

urls.py

(r'^admin/jsi18n/', 'django.views.i18n.javascript_catalog'),

その結果が、先ほど任天堂さん、素晴らしいですけど、私は2つの問題は、テンプレート:

  1. 私のカレンダーアイコン 毎にテンプレートを作成します。
  2. やTimeFieldいて入力が有効です。'

    Here is a screenshot of the Form

models.py

from django.db import models
    name=models.CharField(max_length=100)
    create_date=models.DateField(blank=True)
    start_time=models.TimeField(blank=False)
    end_time=models.TimeField(blank=False)

forms.py

from django import forms
from .models import Guide
from django.contrib.admin import widgets

class GuideForm(forms.ModelForm):
    start_time = forms.DateField(widget=widgets.AdminTimeWidget)
    end_time = forms.DateField(widget=widgets.AdminTimeWidget)
    create_date = forms.DateField(widget=widgets.AdminDateWidget)
    class Meta:
        model=Guide
        fields=['name','categorie','thumb']

にDjango10.myproject/urls.py:初urlpatterns

  from django.views.i18n import JavaScriptCatalog

urlpatterns = [
    url(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'),
.
.
.]

私のtemplate.html:

{% load staticfiles %}

    <script src="{% static "js/jquery-2.2.3.min.js" %}"></script>
    <script src="{% static "js/bootstrap.min.js" %}"></script>
    {# Loading internazionalization for js #}
    {% load i18n admin_modify %}
    <script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
    <script type="text/javascript" src="{% static "/admin/js/jquery.init.js" %}"></script>

    <link rel="stylesheet" type="text/css" href="{% static "/admin/css/base.css" %}">
    <link rel="stylesheet" type="text/css" href="{% static "/admin/css/forms.css" %}">
    <link rel="stylesheet" type="text/css" href="{% static "/admin/css/login.css" %}">
    <link rel="stylesheet" type="text/css" href="{% static "/admin/css/widgets.css" %}">



    <script type="text/javascript" src="{% static "/admin/js/core.js" %}"></script>
    <script type="text/javascript" src="{% static "/admin/js/SelectFilter2.js" %}"></script>
    <script type="text/javascript" src="{% static "/admin/js/admin/RelatedObjectLookups.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>

私のDjangoの設定:1.11 ブートストラップ:3.3.7

からの回答を完全に分かれたテンプレートコードの提示がない誤差ます。

トップ半分のテンプレート:

{% extends 'base.html' %}
{% load static %}
{% load i18n %}

{% block head %}
    <title>Add Interview</title>
{% endblock %}

{% block content %}

<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/widgets.css' %}"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
<script type="text/javascript" src="{% static 'js/jquery.js' %}"></script>

下期

<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.min.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/actions.min.js' %}"></script>
{% endblock %}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top