Проблема в том, что даже если я изменю значение и сохраню форму, когда мне придется перезагрузить форму или зайти на страницу в другой раз, в текстовом поле отображается не сохраненное мной значение, а сегодняшняя дата.
Я нашел этот вопрос , что ответом должно быть изменение 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.'
),
)