[英]How convert epoch time integerfield to datetime field in django admin
我使用 django,為了節省時間,我在IntegerField
使用了epoch time
,所以我的模型是這樣的:
class MyModel(models.Model):
start_time = models.IntegerField()
admin 中的 start_time 是這樣的:
這不是問題,但很難檢查和更新一個人的字段,所以我的問題是如何在 django admin 中將此IntegerField
轉換為DateTimeField
而不更改我的模型? 我知道我可以將此字段表示為只讀字段並將紀元時間轉換為 DateTime 但我如何使用 django admin DateTime 選擇器?
我找到了我的答案,希望它可以幫助其他人,這是可行的,但也許不是最好的答案。
我使用了一個中間字段,因為我無法更改實際字段,所以我創建了一個具有 DateTimeField 的表單:
from django import forms
from django.contrib.admin.widgets import AdminSplitDateTime
class MyModelAdminForm(forms.ModelForm):
start_date_time = forms.SplitDateTimeField(widget=AdminSplitDateTime())
class Meta:
model = MyModel
fields = '__all__'
然后我將表單添加到我的管理員:
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
form = MyModelAdminForm
fields = ('start_date_time',)
用於在表單中設置先前保存的對象的初始值:
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
if obj:
form.base_fields['start_date_time'].initial = datetime.datetime.fromtimestamp(obj.start_time)
return form
結果是:
最后一步是將 DateTimeField 保存到 IntegerField 作為紀元時間:
def save_model(self, request, obj, form, change):
obj.start_time = round(form.cleaned_data['start_date_time'].timestamp())
obj.save()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.