为什么 TimeInput 的 Django 小部件没有显示
Why is Django widgets for TimeInput not showing
我正在尝试在表单中创建一个 TimeInput
字段并注意到 the widget isn't showing correctly. But when I check the localhost:8000/admin
, I see the widget showing up correctly。
我的代码如下。 models.py
,
class TimeLimit(models.Model):
before = models.TimeField(blank=True, default=time(7, 0)) # 7AM
after = models.TimeField(blank=True, default=time(23, 0)) # 11PM
对于views.py
,
class UpdateTimeLimitView(LoginRequiredMixin, FormView):
model = TimeLimit
template_name = 'accounts/update_time_limit.html'
form_class = UpdateTimeLimitForm
def get_success_url(self):
return reverse_lazy('accounts:user_profile') + '?username=' + self.request.GET['username']
def get_context_data(self, **kwargs):
data = super(UpdateTimeLimitView, self).get_context_data(**kwargs)
data['username'] = self.request.GET['username']
return data
对于forms.py
,
class UpdateTimeLimitForm(forms.Form):
time_error = {'required': 'This field is required.',
'invalid': 'Please enter valid Hour:Minute values.'}
before = forms.TimeField(widget=forms.TimeInput(format='%H:%M'))
after = forms.TimeField(widget=TimeInput(format='%H:%M'))
class Meta:
model = TimeLimit
最后,update_time_limit.html
、
中字段的相关部分
<div class="container">
<form method="post">
{% csrf_token %}
<p>
{% for field in form %}
{{ field.errors }}
<label for="{{ field.id_for_label }}">{{ field.label }}({{ field.help_text }}):</label>
<br />
{{ field }}<br /><br /> and
{% endfor %}
</p>
<input class="btn btn-primary done-btn" type="submit" value="Update Time Limit">
</form>
</div>
我有什么遗漏或做错了什么吗?谢谢。
Django 管理员使用 AdminTimeWidget
显示时间字段,而不是您在代码中使用的 TimeInput
小部件。
没有记录在 Django 管理外部重用 AdminTimeWidget
的方法。让它工作非常困难(请参阅 this question 上的答案,该答案可能已过时),因此最好使用其他小部件。
将 datetime.time(7, 0) 转换为适合我的字符串。
data['before'] = data['before'].strftime('%H:%M:%S')
我正在尝试在表单中创建一个 TimeInput
字段并注意到 the widget isn't showing correctly. But when I check the localhost:8000/admin
, I see the widget showing up correctly。
我的代码如下。 models.py
,
class TimeLimit(models.Model):
before = models.TimeField(blank=True, default=time(7, 0)) # 7AM
after = models.TimeField(blank=True, default=time(23, 0)) # 11PM
对于views.py
,
class UpdateTimeLimitView(LoginRequiredMixin, FormView):
model = TimeLimit
template_name = 'accounts/update_time_limit.html'
form_class = UpdateTimeLimitForm
def get_success_url(self):
return reverse_lazy('accounts:user_profile') + '?username=' + self.request.GET['username']
def get_context_data(self, **kwargs):
data = super(UpdateTimeLimitView, self).get_context_data(**kwargs)
data['username'] = self.request.GET['username']
return data
对于forms.py
,
class UpdateTimeLimitForm(forms.Form):
time_error = {'required': 'This field is required.',
'invalid': 'Please enter valid Hour:Minute values.'}
before = forms.TimeField(widget=forms.TimeInput(format='%H:%M'))
after = forms.TimeField(widget=TimeInput(format='%H:%M'))
class Meta:
model = TimeLimit
最后,update_time_limit.html
、
<div class="container">
<form method="post">
{% csrf_token %}
<p>
{% for field in form %}
{{ field.errors }}
<label for="{{ field.id_for_label }}">{{ field.label }}({{ field.help_text }}):</label>
<br />
{{ field }}<br /><br /> and
{% endfor %}
</p>
<input class="btn btn-primary done-btn" type="submit" value="Update Time Limit">
</form>
</div>
我有什么遗漏或做错了什么吗?谢谢。
Django 管理员使用 AdminTimeWidget
显示时间字段,而不是您在代码中使用的 TimeInput
小部件。
没有记录在 Django 管理外部重用 AdminTimeWidget
的方法。让它工作非常困难(请参阅 this question 上的答案,该答案可能已过时),因此最好使用其他小部件。
将 datetime.time(7, 0) 转换为适合我的字符串。
data['before'] = data['before'].strftime('%H:%M:%S')