我正在开发一个 Django 3 应用程序,它允许用户添加和删除数据请求以供审查。用户将从列表中选择用户和站点,并根据数据的可用性填充日期/时间字段,以便能够选择开始和结束日期范围。我正在使用Tempus Dominus时间日期选择器在日期选择器中设置可用日期,并暂时对其进行硬编码。最终目标是在 Elasticsearch 中查询它们,但硬编码目前还可以。
我的问题是;目前表单是静态的,这意味着没有任何选择会改变表单其他部分的内容。当用户从下拉列表中选择不同的用户或站点时,如何使其动态化,以便 enableDates 日期列表发生变化?需要明确的是,用户和站点列表永远不会改变,只是 enableDates 需要改变。
我将不胜感激任何帮助或建议。
目前,提交请求的表单以及显示任何现有请求的表单如下所示:
这是我用于存储数据请求的模型:
class DataRequest(models.Model):
USERS = [
('User1', 'User1'),
('User2', 'User2'),
('User3', 'User3'),
]
users = models.CharField(
choices=USERS,
max_length=32,
default='User1',
)
SITE = [
('Site1', 'Site1'),
('Site2', 'Site2'),
('Site3', 'Site3'),
]
site =models.CharField(
choices=SITE,
max_length=32,
default='Site1',
)
start = models.DateTimeField()
end = models.DateTimeField()
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
def get_request(self):
request = {
"id": self.id,
"users": self.users,
"site": self.site,
"start": self.start,
"end": self.end,
}
return request
这是表格:
class RequestForm(ModelForm):
start = forms.DateTimeField(
widget=DateTimePicker(
options={
},
attrs={
'append': 'fa fa-calendar',
'input_toggle': True,
'icon_toggle': True,
}
)
)
end = forms.DateTimeField(
widget=DateTimePicker(
options={
'useCurrent': False,
'enabledDates':["2021-02-20",], // hard coded dates go here
},
attrs={
'append': 'fa fa-calendar',
'input_toggle': True,
'icon_toggle': True,
}
)
)
class Meta:
model = DataRequest
fields = ['users','site', 'start','end']
def __init__(self, *args, **kwargs):
super(RequestForm, self).__init__(*args, **kwargs)
self.fields['users'].widget.attrs.update({'class' : 'form-control'})
self.fields['site'].widget.attrs.update({'class' : 'form-control'})
这是添加和删除请求的视图,现有数据请求的列表在页面上下文中发送:
def delRequest(request, pk):
if request.method == 'POST':
request = DataRequest.objects.get(id=pk)
request.delete()
return redirect('dashboard')
def addRequest (request):
if request.method == 'POST':
form = RequestForm(request.POST)
if form.is_valid():
DataRequest.objects.create(
user=request.user,
users=form.cleaned_data['users'],
site=form.cleaned_data['site'],
start=form.cleaned_data['start'],
end=form.cleaned_data['end']
)
print("Added new Request")
return redirect('dashboard')