python - Django ModelForm 的 DateTime 值在本地化关闭的情况下进行本地化/翻译
问题描述
所以我正在开发这个活动管理平台,我们使用的是 Django 3.0.4。在我暴露我的问题之前,我必须说我对 Django 和 python 本身有点陌生。
我目前的目标是允许管理员为特定事件设置特定日期。最初,该页面必须显示当前日期和详细信息。我已经可以使用下面显示的代码了
这是用于存储日期的模型示例
class Dates(models.Model):
id = models.AutoField(db_column='ID', primary_key=True)
datestart = models.DateTimeField(db_column='DateStart')
dateend = models.DateTimeField(db_column='DateEnd')
class Meta:
db_table = 'Dates'
这是我的表格
class dateForm(forms.ModelForm):
class Meta:
model = Dates
exclude = ['id']
这是我当前的视图功能
def editdates(request):
dates_current = Dates.objects.get(id=1)
dates_form = dateForm(instance=dates_current)
if request.method == 'POST':
submitted_data = request.POST.copy() #Might need to change incoming data before saving to db
dates_form = diaAbertoSettingsForm(submitted_data, instance=dates_current) #Generate form with existing data
if dates_form.is_valid():
dates_form.save()
return render(request=request,
template_name = 'dates/edit.html',
context = {'form': dates_form})
显示数据(日期)的同一页面还必须允许您提交更改,这相对容易做到。当我想提交表单时,真正的问题就开始了。
目前,我执行以下操作来显示当前值
<div class="column">
<div class="field">
{% if form.datestart.errors %}
<div class="alert alert-danger">
<strong>{{form.datestart.errors}}</strong>
</div>
{% endif %}
<label class="label">Date Start</label>
<div class="control">
<input class="input" type="text" name="datestart" value='{{form.datestart.value}}'>
</div>
</div>
</div>
这一切都很好,直到您看到结果{{form.datestart.value}}
不是您所期望的正常的“YY-MM-DD H:M:S”日期时间(例如 2000-01-01 00:00:00)格式,但是像“2000 年 1 月 1 日午夜”这样的“写出”格式,当我希望用户编辑此日期时,这显然会导致问题。如果他们要保留格式,表单将返回一个错误,说明 dateTime 的格式无效。
为了解决这个问题,我尝试了以下方法:
- 关闭 settings.py 中的“格式本地化”并逐个模板
- 关闭“翻译”,同上
- 我尝试使用django 文档中描述的日期过滤器
- 我也尝试过使用django utils 中的日期时间解析器
除了文档之外,我还查看了其他资源,但似乎没有人分享我的问题。
如果我要放置{{form.datestart}}
而不是{{form.datestart.value}}
,确实会使其正确,但是由于我想使用 bulma 的类,所以我看不到解决方法。
我怎样才能使它{{form.datestart.value}}
出来,2000-01-01 00:00:00
而不是作为Jan. 1, 2000, midnight
?
这只是一个例子,真实模型有大约 10 个不同的开始/结束日期,因此保持自动化的方法是理想的,但不是必需的。
解决方案
我修好了它。解决方案相当简单,事后看来这是我一开始就应该做的。
首先,我关闭了全球本地化。其次,我将我的 modelForm 更改为以下
class dateForm(forms.ModelForm):
class Meta:
model = Dates
exclude = ['id']
widgets = {
'datestart': DateTimeInput(attrs={'class': 'input'})
}
这使我可以为我的字段提供自定义类。然后在模板中我<input class="input" type="text" name="datestart" value='{{form.datestart.value}}'>
用完整的字段替换{{form.datestart}}
。
推荐阅读
- pdf - SSRS - “打印我们将为您的报告创建一个便于打印的 PDF 版本。”
- spring - 访问 BeanDefinitionRegistryPostProcessor 中的弹簧加载属性
- stenciljs - 使用 stencilJS 生成动态 Unorderlist Web 组件
- javascript - 用于多选的 JS 脚本
- java - docx4j 正确定位段落
- excel - 计数过滤的行并显示计数
- c# - 如何检查单元格是否为日期并截断时间部分?
- python - 为具有非零值的 numpy.array 中的每一列查找最小/最大行索引的有效方法?
- java - 如何使用 MongoTemplate 增加 BigInteger 值?
- javascript - 如何使用 javascript 对象在属性中使用悬停?