繁体   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