Администратор Django, использующий иерархию дат и временную метку Unix - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть модель как:

class MyClass(models.Model):
    source_time = TimestampField()
    price = models.IntegerField()
    quantity = models.IntegerField()

и я хотел бы включить на странице администратора date_hierachy следующим образом:

class MyClassAdmin(admin.ModelAdmin):
    list_display = ('source_time', 'price', 'quantity')
    date_hierarchy = 'source_time'

но для этого требуется DateTime. Я попытался создать настраиваемое поле, полученное из DateTime, которое преобразует BigIntegerField в DateTimeField, но я получил эту ошибку: "Caught AttributeError при рендеринге: у объекта 'long' нет атрибута 'year'"

from django.db import models
from datetime import datetime
from time import strftime, mktime
import time

class TimestampField(models.DateTimeField):
    __metaclass__ = models.SubfieldBase
    def __init__(self, null = False, **kwargs):
        super(TimestampField, self).__init__(**kwargs)

    def db_type(self, connection):
        return 'bigint'

    def to_python(self, value):
        super(TimestampField, self)
        try:
            return datetime.fromtimestamp(float(value)/1000000)
        except:
            return value

Разве новое настраиваемое поле не должно вести себя точно как DateTimeField? Как я могу заставить работать date_hierarchy, если в таблице есть поле BigInteger?

1 Ответ

0 голосов
/ 21 декабря 2011

Вы можете написать свой новый date_hierarchy на основе существующего кода. Смотрите файл: django/contrib/admin/templatetags/admin_list.py, строка 235.

...