django 更新视图不显示日期输入(以前的)值
django update view not showing date input (previous) values
当我进入更新页面时,
除日期输入(截止日期和提醒)外,所有以前的值都会显示。
我该如何解决?
起初我没有为 TaskUpdateView 使用 TaskCreationForm,因为考虑到 django 会自动处理它,但后来日期输入变成了普通的文本输入,因此在单击文本框时不会出现日期选择器。
我以为这是我用过的小部件,所以我决定使用 TaskCreationForm 来创建和更新。
models.py
class Task(models.Model):
deadline_date = models.DateTimeField(verbose_name='Deadline')
status = models.BooleanField(verbose_name='Task Status', default=False)
reminder = models.DateTimeField(verbose_name='reminder')
class Meta:
verbose_name_plural = 'Tasks'
ordering = ('-deadline_date',)
db_table = 'task'
forms.py
class DateInput(forms.DateInput):
input_type = 'datetime-local'
class TaskCreationForm(forms.ModelForm):
class Meta:
model = Task
fields = ('title', 'deadline_date', 'description', 'reminder')
labels = {
'reminder': 'remind me'
}
widgets = {
'deadline_date': DateInput(),
'reminder': DateInput(),
'description': forms.Textarea(attrs={'cols': 80, 'rows': 5})
}
views.py
class TaskCreateView(CreateView):
model = Task
form_class = TaskCreationForm
template_name = 'mysite/add_task.html'
success_url = reverse_lazy('mysite:home')
def post(self, request, *args, **kwargs):
task_form = TaskCreationForm(request.POST)
if task_form.is_valid():
cd = task_form.cleaned_data
current_user = request.user
task = Task(title=cd['title'], description=cd['description'],
user=current_user, deadline_date=cd['deadline_date'],
reminder=cd['reminder']
)
task.save()
return redirect('mysite:home')
class TaskUpdateView(UpdateView):
model = Task
form_class = TaskCreationForm
# fields = ('title', 'deadline_date', 'reminder', 'status', 'description',)
template_name = 'mysite/edit_task.html'
经过数周的搜索和努力,我发现为了显示之前的日期,我必须将特定格式的日期发送到 Django 模板:“year-month-dayThour:minute”
例如:“2018-06-12T07:30”。但默认情况下,Django 以另一种格式将日期发送到模板(在给定的示例中:2018 年 6 月 11 日,7:30 a.m。)
所以为了解决这个问题,我使用了Django date filter
我将值更改为:value="{{form.deadline_date.value | date:'c'}}"
(在模板中)
当我进入更新页面时,
除日期输入(截止日期和提醒)外,所有以前的值都会显示。
我该如何解决?
起初我没有为 TaskUpdateView 使用 TaskCreationForm,因为考虑到 django 会自动处理它,但后来日期输入变成了普通的文本输入,因此在单击文本框时不会出现日期选择器。
我以为这是我用过的小部件,所以我决定使用 TaskCreationForm 来创建和更新。
models.py
class Task(models.Model):
deadline_date = models.DateTimeField(verbose_name='Deadline')
status = models.BooleanField(verbose_name='Task Status', default=False)
reminder = models.DateTimeField(verbose_name='reminder')
class Meta:
verbose_name_plural = 'Tasks'
ordering = ('-deadline_date',)
db_table = 'task'
forms.py
class DateInput(forms.DateInput):
input_type = 'datetime-local'
class TaskCreationForm(forms.ModelForm):
class Meta:
model = Task
fields = ('title', 'deadline_date', 'description', 'reminder')
labels = {
'reminder': 'remind me'
}
widgets = {
'deadline_date': DateInput(),
'reminder': DateInput(),
'description': forms.Textarea(attrs={'cols': 80, 'rows': 5})
}
views.py
class TaskCreateView(CreateView):
model = Task
form_class = TaskCreationForm
template_name = 'mysite/add_task.html'
success_url = reverse_lazy('mysite:home')
def post(self, request, *args, **kwargs):
task_form = TaskCreationForm(request.POST)
if task_form.is_valid():
cd = task_form.cleaned_data
current_user = request.user
task = Task(title=cd['title'], description=cd['description'],
user=current_user, deadline_date=cd['deadline_date'],
reminder=cd['reminder']
)
task.save()
return redirect('mysite:home')
class TaskUpdateView(UpdateView):
model = Task
form_class = TaskCreationForm
# fields = ('title', 'deadline_date', 'reminder', 'status', 'description',)
template_name = 'mysite/edit_task.html'
经过数周的搜索和努力,我发现为了显示之前的日期,我必须将特定格式的日期发送到 Django 模板:“year-month-dayThour:minute”
例如:“2018-06-12T07:30”。但默认情况下,Django 以另一种格式将日期发送到模板(在给定的示例中:2018 年 6 月 11 日,7:30 a.m。)
所以为了解决这个问题,我使用了Django date filter
我将值更改为:value="{{form.deadline_date.value | date:'c'}}"
(在模板中)