修改在ModelAdmin list_display上显示的DateField格式

时间:2020-10-18 00:14:56

标签: django datetime django-models format django-admin

在ModelAdmin上,我可以使用所需的格式(即#format ='%Y-%m-%d')查看task_date DateField。但是,使用RStudio时,相同的DateField将以另一种格式显示。如何指定list_display需要用于DateFields的格式?

在models.py

barPlot <- dataGlobal %>% 
  ggplot(aes(responseOption, 
             mean, 
             fill = subpopulationGroup)) +
  geom_col(width = 0.8, 
           position = position_dodge(width = 0.8)) +
  geom_errorbar(aes(ymin = lowerCI, ymax = upperCI), 
                width = 0.1, 
                colour = 'black', 
                position = position_dodge(width = 0.8)) +
  geom_signif(annotations = c('*', '*', '**', '***', '**'),
              y_position = c(32, 24, 63, 37, 28),
              xmin = c(0.73, 1.73, 2.73, 0.73, 1.73),
              xmax = c(1, 2, 3, 1.27, 2.27))

在admin.py上

list_display('task_date')

这是创建新的StaffTimeSheet对象时DateField的外观

date filed format

这是已创建的StaffTimeSheet对象的列表,我要在其中修改task_date DateField的格式

date filed format list_display

2 个答案:

答案 0 :(得分:1)

在类StaffTimeSheetModelAdmin内的该admin.py中编写一个函数

    def custom_date_format(self, obj):
      if obj.task_date:
        return "your formatting logic here"
      return ''

list_display中添加custom_date_format

答案 1 :(得分:0)

为了解决这个问题,我不得不做两件事。

  1. 按照@Clifton Avil D'Souza的建议在StaffTimeSheetModelAdmin类中编写一个函数
  2. 将时间转换为我想要的格式

为了执行第2步,我创建了一个名为day_hour_format_converter的辅助函数,因为我必须执行UTC到本地时间的转换,因为默认情况下,数据库中存储的时间是UTC,并且我显示了错误的小时值

models.py未修改。这是我更新的代码:

在admin.py上

from django.utils.timezone import now, localtime

def day_hour_format_converter(date_time_UTC):
    local_time = localtime(date_time_UTC)
    return str(local_time.year) +'-'+ str(local_time.month) +'-'+ str(local_time.day) + ' , ' + str(local_time.hour) +':'+ str(local_time.minute) 

class StaffTimeSheetModelAdmin(admin.ModelAdmin):

    formfield_overrides = {
        models.CharField: {'widget': TextInput(attrs={'size':'50'})},
        models.TextField: {'widget': Textarea(attrs={'rows':2, 'cols':50})},
    }

    def task_belongs_to_project_order (self,staff_time_sheet_obj):
        return "\n".join([str(order.order_project.project_number) + "-" + str(order.order_number) for order in staff_time_sheet_obj.task_belongs_to_order.all()])

    def start_time(self, staff_time_sheet_obj):
      if staff_time_sheet_obj.task_start_time:
        return day_hour_format_converter(staff_time_sheet_obj.task_start_time)

    def end_time(self, staff_time_sheet_obj):
      if staff_time_sheet_obj.task_end_time:
        return day_hour_format_converter(staff_time_sheet_obj.task_end_time)


    list_display = ('time_sheet_owner','task_belongs_to_project_order','start_time','end_time','task_description')
    search_fields = ['task_start_time','task_description','task_belongs_to_order__order_number','task_belongs_to_order__order_project__project_number']  #TODO be able to look for "project-order" as a monolitic expression
    list_filter = ('time_sheet_owner','task_start_time')