0

私はこのように2つ持ってい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 が良い出発点です。

これが大変な作業に聞こえる場合は、次の 3 つの回避策を想像できます。

  1. 各タスクと各締め切りごとに新しい列を作成し、そこに「task_taskname」などのタスクと取引を追加します。もちろん、各プロジェクトに 2 つまたは 3 つのタスクがある場合、これは情報量が多すぎます。
  2. あなたの論理を逆にしてください!プロジェクト用ではなく、タスク用に list_view を作成してください! プロジェクト名をこのリストに追加することもできます。実際、これが現在の 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 に答える