【发布时间】:2018-05-30 00:01:49
【问题描述】:
在 Django 管理员中,当从下拉列表中选择 Custom 选项时,我想显示内联 start_date 和 end_date 字段以允许用户指定特定的开始和结束日期,而不是预定义的时间段。
经过一段时间的研究,建议包括:使用隐藏字段,在ModelAdmin中定义覆盖get_form,或者使用自定义Javascript(我零经验)。
问题:当在 Django Admin 字段的下拉列表中选择特定值 (Custom) 时,如何显示(显示)内联 start_date 和 end_date 字段?当Custom没有被选中时,start_date和end_date会被隐藏起来。
以下是我在本地拥有的确切示例代码的完整示例:
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
...
'dropdown.apps.DropdownConfig',
]
apps.py
from django.apps import AppConfig
class DropdownConfig(AppConfig):
name = 'dropdown'
models.py
from django.db import models
class DropdownModel(models.Model):
CHOICES = (
('Today', 'Today'),
('Yesterday', 'Yesterday'),
('Last 7 Days', 'Last 7 Days'),
('Last 14 Days', 'Last 14 Days'),
('Last 30 Days', 'Last 30 Days'),
('Last 60 Days', 'Last 60 Days'),
('Last 90 Days', 'Last 90 Days'),
('This Year', 'This Year'),
('All Time', 'All Time'),
('Custom', 'Custom')
)
date_range = models.CharField(max_length=15)
start_date = models.DateField()
end_date = models.DateField()
forms.py
from django import forms
from dropdown.models import DropdownModel
class DropdownModelForm(forms.ModelForm):
class Meta:
model = DropdownModel
fields = ('date_range',)
widgets = {
'date_range': forms.Select(choices=DropdownModel.CHOICES)
}
admin.py
from django.contrib import admin
from dropdown.models import DropdownModel
from dropdown.forms import DropdownModelForm
class DropdownModelAdmin(admin.ModelAdmin):
fieldsets = (
('Date Range', {
'fields': ('date_range', ('start_date', 'end_date'))
}),
)
form = DropdownModelForm
admin.site.register(DropdownModel, DropdownModelAdmin)
【问题讨论】:
-
我不认为你会逃避拥有一个自定义 JS.... 看看stackoverflow.com/questions/18678711/…
-
好吧,如果您的目标是实时隐藏和显示,Javascript (AJAX) 不是一个选项,它实际上是强制性的。我看不到任何内置 Django 功能的方法可以让您实现这一目标。
标签: python django django-forms django-admin