そこには非常に多くの日付/日時ピッカーの実装があります。 DjangoおよびCrispyFormsと特にうまく統合できるものはありますか?また、それらはどのように使用されますか?
開発の労力を最小限に抑え、シンプルさを最大限に高め、Djangoローカリゼーションを利用することを目指しています。
日付フィールドのDjango/Crispy標準出力:
<input class="dateinput form-control" id="id_birth_date" name="birth_date" type="text" value="21/07/2015">
モデル内:
birth_date = models.DateField(verbose_name='D.O.B', auto_now_add=False, auto_now=False)
ありがとう!
編集:
プロファイルモデル:
from Django.db import models
class Profile(models.Model):
birth_date = models.DateField(verbose_name='D.O.B', auto_now_add=False, auto_now=False)
プロファイルフォーム:
from Django import forms
from profiles.models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
birth_date = forms.DateField(
widget=forms.TextInput(
attrs={'type': 'date'}
)
)
縦断ビュー:
from Django.shortcuts import get_object_or_404
from Django.contrib.auth import get_user_model
from profiles.models import Profile
from profiles.forms import ProfileForm
User = get_user_model()
def edit(request):
profile = get_object_or_404(Profile, user=request.user)
form = ProfileForm(request.POST or None, request.FILES or None, instance=profile)
if request.method == 'POST' and form.is_valid():
form.save()
context = {
'form': form,
'page_title': 'Edit Profile',
}
return render(request, 'profiles/edit.html', context)
プロファイル編集テンプレート:
<form enctype="multipart/form-data" method="POST" action=".">
{% csrf_token %}
{{ form }}
<input class='btn btn-primary' type="submit" value="Submit" />
</form>
シャキッとしたフォームの答えではありませんが、入力にtype
の属性date
がある限り、新しいブラウザでは日付ピッカーが表示されます。これは、最小限の開発作業のカテゴリに分類されます。
date_field = forms.DateField(
widget=forms.TextInput(
attrs={'type': 'date'}
)
)
Django.forms.SelectDateWidget はシンプルで柔軟性があります:
date_field = forms.DateField(
widget=forms.SelectDateWidget(years, months, empty_label)
)
独自のテンプレートファイルも含まれています。
私のソリューションはシンプルで、 https://eonasdan.github.io/bootstrap-datetimepicker/ のdatetimepickerを使用しています。
Cssファイルを含めます。
<link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" rel="stylesheet">
Jsファイルを含めます。
<script src="{% static 'js/jquery-3.1.1.js' %}"></script>
<script src="{% static 'js/bootstrap.min.js' %}"></script>
<script src="{% static 'js/moment-master/min/moment.min.js' %}"></script>
<script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
次の形式でフィールドのcssクラスを定義します(Crispyでも機能します)。
class MyForm(forms.ModelForm):
class Meta:
model = MyModelo
fields = ['a','b','c']
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['a'].widget.attrs['class'] = 'datepicker'
テンプレートには、cssクラスにリンクするJQuery関数を含めます。
<script type="text/javascript">
$(function () {
$('.datepicker').datetimepicker(
{
format: 'YYYY-MM-DD HH:mm:ss',
sideBySide: true
}
);
});
</script>
このソリューションは、Django 1.10、クリスピーフォームおよびDjangoモデルフォームでうまく機能します。