0

ModelAdmin我有两个admin.py这样的:

class ProjectAdmin(admin.ModelAdmin):
    list_display = ('project_name', 'start_date', 'end_date')
    list_filter = ['end_date']
    search_fields = ['project_name']

class TaskAdmin(admin.ModelAdmin):
    list_display = ('project', 'task_name', 'status', 'comment', 'deadline', 'last_updated')
    list_filter = ['last_updated', 'deadline', 'status']
    search_fields = ['project', 'task_name']

这列出了项目:

Project Name                          Start_date                 End_date
# Data

但我想自定义看起来像这样:

Project Name        Task Name                       Deadline
# Project1            # Task 1 of Project1           # Task 1 Deadline
                      # Task 2 of project 1             # Deadline
                      # Task 3 of project 1             # Deadline

# Project 2           # Task 1 of project 2           # Deadline

and so on. 

我怎样才能做到这一点?文档中是否包含类似的内容?我进行了快速搜索,但找不到继续前进的正确指针。

谢谢

4

1 回答 1

1

您必须构建自己的视图并将其添加到管理员。也许管理员 list_view 是一个很好的起点。

如果这听起来工作量太大,我可以想象三种解决方法:

  1. 为每个任务和每个截止日期创建一个新列,并在其中添加任务和事务,例如“task_taskname”等。当然,如果您在每个项目中有两个或三个任务,这将是太多的信息。
  2. 颠倒你的逻辑!不要为项目创建列表视图,而是为任务创建列表视图!您仍然可以将项目名称添加到此列表中。实际上,这是您当前的 TaskAdmin。
  3. 使用模型函数生成任务名称和截止日期的条目。此外,请给出简短的描述,例如get_all_tasks.short_description = 'Task Name'. 这应该够了吧!

有趣的是,你的问题可能在我的大脑中触发了一些事情,我为自己的项目做了一些非常相似的事情。您可以通过定义提供内容的函数来解决您的问题(请参阅上面的选项 3.):

class ProjectAdmin(admin.ModelAdmin):
    list_display = ('project_name', 'project_tasks', 'task_deadlines', 'end_date')
    list_filter = ['end_date']
    search_fields = ['project_name']

    def project_tasks(self, instance):
         out = ""
         for task in instance.task_set.all(): 
             #generate html output
             out += "{0}<br />".format(task.taskname)
         return out
    project_tasks.allow_tags = True #html should be renderd as is
    project_tasks.short_description = "Task Name"

    #Same for Deadline

这应该够了吧!

这就是我的应用程序中的样子

于 2013-09-13T18:32:20.923 回答