Django 表单中的动态日期时间字段

时间:2021-02-19 10:48:24

标签: django django-forms django-templates tempus-dominus-datetimepicker

我正在开发一个 Django 3 应用程序,该应用程序允许用户添加和删除数据请求以供审核。用户将从列表中选择用户和站点,并根据数据的可用性填充日期/时间字段,以便能够选择开始和结束日期范围。我正在使用 Tempus Dominus 时间日期选择器在日期选择器中设置可用日期,并暂时对它们进行硬编码。最终目标是为它们查询 Elasticsearch,但硬编码目前还可以。

我的问题是;目前表单是静态的,这意味着没有任何选择会更改表单其他部分的内容。 当用户从下拉列表中选择不同的用户或站点时,如何使其动态化,以便 enableDates 日期列表发生变化?需要说明的是,用户和站点列表永远不会改变,只是需要更改 enableDates。

如果您有任何帮助或建议,我将不胜感激。

目前提交请求的表单以及显示任何现有请求如下:

enter image description here

这是我用于存储数据请求的模型:

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')

0 个答案:

没有答案