簡體   English   中英

如何在 django admin 中將紀元時間整數字段轉換為日期時間字段

[英]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 是這樣的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM