Если вы решили предоставить элемент «list_display» через свою собственную функцию, и вам не нравятся выходные данные по умолчанию, вам нужно будет отформатировать его самостоятельно.В этом случае, если вы хотите, чтобы форматирование идентично тому, что заканчивается в поле базы данных DateTime:
from django.utils import formats
def today(self):
return formats.localize(self.field2)
Фон:
templates/admin/change_list.html
использует тег шаблона
django.contrib.admin.templatetags.admin_list.result_list
, который, в свою очередь, вызовет
django.contrib.admin.templatetags.admin_list.items_for_result()
для визуализации значений отдельных столбцов для каждой строки.
Вы увидите, что оба ваших значения начинаются с экземпляра DateTime, либос помощью поиска в базе данных или вызова вашей функции см.
django.contrib.admin.util.lookup_field()
, но возвращаемое значение «f» будет только полем, если поле базы данных было.Вы предоставили функцию, поэтому lookup_field () предоставит только значение, а "f" будет None.
Таким образом, в items_for_result () ваше значение будет проходить через блок "если f равен None" и пропущено
result_repr = display_for_field(value, f)
Другими словами,
django.contrib.admin.util.display_for_field()
будет вызываться только из значения базы данных для форматирования в соответствии с типом поля, так что это процедура, в которой отсутствует значение вашей функции:
elif isinstance(field, models.DateField) or isinstance(field, models.TimeField):
return formats.localize(value)
, и вам нужно будет выполнить эту последнюю строку самостоятельно, как показано выше.
РЕДАКТИРОВАТЬ: Относительно вашего вопроса
Как я могу сказать администратору сайта обрабатывать сегодня, как он обрабатывает field2?То есть, скажите администратору Django, что «сегодня» - это модели. DateTimeField?
Это не модели. DateTimeField, это значение функции.Если бы это был models.DateTimeField, он бы описывал вашу модель.Посмотрите на все, что влечет за собой: http://docs.djangoproject.com/en/dev/ref/models/fields/ В вашем примере вы действительно можете просто использовать field2.По-видимому, вы хотите что-то сделать с его значением, вычислить его и т. Д. - тогда что же такое сегодня.по умолчанию, так как это то, что документация по локализации кажется многообещающей.Кстати, я бы лучше определил форматированное значение в ModelAdmin, чем в самой модели.Я обычно называю это чем-то вроде «formatted_today» (чтобы сохранить значение datetime оригинала today ()), просто, если Admin - единственное место, где нужно отформатированное значение, imho, именно здесь оно должно быть определено.