【发布时间】:2019-03-01 08:24:09
【问题描述】:
问题是,即使我更改了值并保存了表单,当我必须重新加载表单或再次进入页面时,文本框不会显示我保存的值,而是今天的日期。
我发现这个question 的答案是将useCurrent 更改为false,但这并不能解决我的问题。
我正在使用 Django 2.1 和 postgreSQL 进行开发,但我认为在这种情况下它与问题没有任何关系,因为如果我从输入中删除类 datetimepicker,日期会正确显示。
我的实际 JS:
var endDateMin = new Date();
endDateMin.setDate(endDateMin.getDate() + 1);
$(function () {
$('.datetimepicker').datetimepicker(
{
format: 'DD/MM/YYYY hh:mm',
minDate: endDateMin,
useCurrent: false,
icons: {
time: "fa fa-clock-o",
date: "fa fa-calendar",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down",
previous: "fa fa-arrow-left",
next: "fa fa-arrow-right",
}
}
);
});
我的表单:(字段为 end_date)
class UpdateProjectGeneralForm(forms.ModelForm):
end_date = forms.DateTimeField(input_formats=['%d/%m/%Y %H:%M',])
class Meta:
model = Project
fields = ('name', 'short_description', 'category', 'investment', 'description',
'end_date', 'image')
widgets = {
'description': SummernoteWidget(attrs={'summernote': {
'placeholder': 'Describe your project here...'}}),
'image': FileInput(),
}
def __init__(self, *args, **kwargs):
# first call parent's constructor
super(UpdateProjectGeneralForm, self).__init__(*args, **kwargs)
# there's a `fields` property now
self.fields['investment'].required = True
self.fields['name'].widget = forms.TextInput(
attrs={'placeholder': 'enter the project name here...'})
self.fields['short_description'].widget = forms.Textarea(
attrs={'rows': '2',
'maxlength': '135',
'class': 'textarea-limited',
'placeholder': 'enter a short description of your project limited to 135 characters'})
self.fields['end_date'].widget.attrs['class'] = 'datetimepicker'
#if self.fields['end_date']:
# self.fields['end_date'].widget.attrs['placeholder'] = self.fields['end_date']
#else:
self.fields['end_date'].widget.attrs['placeholder'] = datetime.now().strftime('%d/%m/%Y %H:%M')
self.fields['category'].widget.attrs['class'] = 'selectpicker'
self.fields['category'].widget.attrs['data-live-search'] = 'true'
self.fields['category'].widget.attrs['data-size'] = '5'
self.fields['image'].widget.attrs['class'] = 'btn btn-outline-default btn-file btn-round'
# evade all labels and help text to appear when using "as_crispy_tag"
self.helper = FormHelper(self)
self.helper.form_show_labels = False
self.helper._help_text_inline = True
查看:
class ProjectEditGeneralView(LoginRequiredMixin, SuccessMessageMixin, generic.UpdateView):
template_name = 'webplatform/project_edit_general.html'
model = Project
form_class = UpdateProjectGeneralForm
success_message = 'Project successfully updated!'
def get_success_url(self):
return reverse_lazy('project-edit-general', args=(self.object.id,))
# Make the view only available for the users with current fields
def dispatch(self, request, *args, **kwargs):
project = self.get_object()
# here you can make your custom validation for any particular user
if request.user != project.user:
raise PermissionDenied()
return super().dispatch(request, *args, **kwargs)
# Set field as current user
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.history_change_reason = 'Project Updated'
return super(ProjectEditGeneralView, self).form_valid(form)
模型上的字段:
end_date = models.DateTimeField(
null=True,
blank=True,
help_text=_(
'Select the end date of your project.'
),
)
【问题讨论】:
-
您如何存储和检索保存的日期?
-
@AndroidNoobie 我用所有相关信息更新了问题。
-
@AndroidNoobie 很抱歉,但是 ping,但你知道吗?
-
嗯,模型表单+更新视图默认应该这样做。实际上,如果我不使用 DateTimePicker (js),它会显示检索到的信息。而且,问题似乎在于这个 JS 更新了我的字段,删除了当前值,因为如果我更新页面,我可以立即看到当前日期。编辑:这是该字段的 gif,页面更新了几次:gyazo.com/175c1b4d9b81f6ffe6e95b97e32b23ef
标签: javascript datetimepicker bootstrap-datetimepicker eonasdan-datetimepicker