Как преобразовать целое поле времени эпохи в поле даты и времени в django admin - PullRequest
0 голосов
/ 27 мая 2019

Я использую django, и для экономии времени я использую epoch time в IntegerField, поэтому моя модель выглядит следующим образом:

class MyModel(models.Model):
    start_time = models.IntegerField()

, а start_time в admin выглядит следующим образом:

start_time integerfield

Это не проблема, но трудно проверить и обновить поле для человека, поэтому мой вопрос заключается в том, как я могу преобразовать это IntegerField в DateTimeField в администраторе djangoбез изменения моей модели?Я знаю, что могу представить это поле как поле только для чтения и преобразовать время эпохи в DateTime, но как я могу использовать django admin DateTime picker?

1 Ответ

1 голос
/ 27 мая 2019

Я нашел свой ответ, надеюсь, что он поможет кому-то еще, это работа, но, возможно, это не лучший ответ.

Я использовал промежуточное поле, потому что я не мог изменить реальное поле так,Я создаю форму с 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(Product)
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

результат:

epoch datetime field

и последний шаг - сохранение DateTimeField в IntegerField в качестве времени эпохи:

def save_model(self, request, obj, form, change):
    obj.start_time = round(form.cleaned_data['start_date_time'].timestamp())
    obj.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...