我有一个 django 模型,其中一些 model.DateTimeFields 作为属性。因为用户必须能够单独添加时间和日期,并且因为我希望能够完全自定义在模板中呈现的日期和时间输入,所以我做了以下操作
class Entry(models.Model):
title = models.CharField(max_length=40)
body = models.CharField(max_length=10000, blank=True)
created = models.DateTimeField(auto_now_add=True)
start_date = models.DateField(default=datetime.now().date())
start_hour = models.TimeField(default=datetime.now().time())
start = models.DateTimeField()
end_hour = models.TimeField(default=(datetime.now()+ timedelta(minutes=45)).time())
end = models.DateTimeField()
表格
class EntryAddForm(ModelForm):
def __init__(self, *args, **kwargs):
super(EntryAddForm, self).__init__(*args, **kwargs)
self.fields['doctor'].queryset = Doctor.objects.all()
class Meta:
model = Entry
exclude = ('canceled','creator', 'reason','start', 'end')
widgets....#setting widgets here
def save(self, commit=True):
model = super(EntryAddForm, self).save(commit=False)
model.start = datetime.combine(self.cleaned_data['start_date'], self.cleaned_data['start_hour'])
model.end = datetime.combine(self.cleaned_data['start_date'], self.cleaned_data['end_hour'])
if commit:
model.save()
return model
所以在保存方法中,我创建了一个新的日期时间对象,并结合了开始日期和开始时间
问题是当您将它们呈现在表单上进行编辑时。因为输入日期存储在 utc start_hour 和 end_hour 不是我从表单中保存它们的确切时间,而是晚了 3 个小时(因为我住在希腊,我的设置文件中有 TIME_ZONE = Athens)。
真的有一种简单的方法可以解决这个问题,还是不使用感知对象的解决方案?
还有一点题外话。Javascript 如何知道时区偏移量。我愿意
x = new Date();
x.getTimeZoneOffset() / 60;
我得到 -3 这是正确的。如果我在我的 Ubuntu 系统中更改我的时区,我的 ubuntu 时钟会更改以匹配所选时区的时间,但上面的 javascript 代码会返回相同的结果。所以javascript不会使用系统时区?