我能够在 Django 管理中自定义默认日期小部件。我遵循了两个教程(来自简单胜于复杂 https://simpleisbetterthancomplex.com/tutorial/2019/01/03/how-to-use-date-picker-with-django.html and Django 自定义小部件 https://blog.ihfazh.com/django-custom-widget-with-3-examples.html)
- 在名为的文件中编写自定义小部件
widgets.py
在你的 Django 应用程序中
from django.forms import DateInput
class CustomDatePickerInput(DateInput):
template_name = "app_name/widgets/custom_datepicker.html"
class Media:
css = {
"all": (
"https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.css",
)
}
js = (
"https://code.jquery.com/jquery-3.4.1.min.js",
"https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.js",
"https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/i18n/datepicker.es-ES.min.js",
)
请注意,您可能需要的 CSS 和 JS 文件应添加到内部Media
类如上面的代码所示。在本例中,它为自定义添加样式日期选择器 https://github.com/fengyuanchen/datepicker.
- 为您的小部件定义模板,有关更多日期选择器选项,请参阅here https://github.com/fengyuanchen/datepicker#options,把这个文件放入
app_name/templates/app_name/widgets/custom_datepicker.html
或确保此模板与值匹配template_name
在您的自定义小部件中:
{% load i18n %}
{% include "django/forms/widgets/input.html" %}
{% get_current_language as LANGUAGE_CODE %}
<script>
$(function () {
const DATE_PICKER_OPTIONS = {
'en-us': {
format: 'yyyy-mm-dd',
language: ''
},
'es': {
format: 'dd/mm/yyyy',
language: 'es-ES'
}
};
let options = DATE_PICKER_OPTIONS['{{ LANGUAGE_CODE }}'];
$("input[name='{{ widget.name }}']").datepicker({
format: options.format,
language: options.language
});
});
</script>
- 在 Django 管理中注册模型时,您需要指示在日期字段中使用什么小部件(使用
formfield_overrides
)
@admin.register(YourModel)
class YourModelAdmin(admin.ModelAdmin):
formfield_overrides = {models.DateField: {"widget": CustomDatePickerInput}}
完成此操作后,您将在 Django 管理员中拥有一个用于日期的自定义小部件。请记住,这只是一个指南,您可以通过查看我指出的两个教程来进一步了解。
Note:这个小部件的实现也支持国际化。