4

やあ。次の質問を読んだ後、この質問をしています:Question_1Question_2。Question_1には適切な回答がなく、Question_2には代替ソリューションがありますが、完全なソリューションではありません。

ここに2つのモデルとそれらの管理者がいます。

models.py

class TaskList(models.Model):
    task_name      = models.CharField(max_length = 255, unique = True)
    description    = models.TextField()
    assignee_role  = models.ForeignKey(Group, related_name = "assignee_roles")
    assignee_name  = models.ForeignKey(User, related_name = "assignee_names")

    def __unicode__(self):
        return "%s" % (self.task_name)

class TaskComments(models.Model):
    tasklist = models.ForeignKey(TaskList)
    time     = models.DateTimeField(null = True, blank = True)
    comment  = models.TextField()

    def __unicode__(self):
        return ""

    def save(self, *args, **kwargs):
        self.time = datetime.datetime.now()
        super(TaskComments, self).save(*args, **kwargs)

admin.py

class TaskCommentsInlineAdmin(admin.TabularInline):
    model           = TaskComments
    can_delete      = False

class TaskListAdmin(admin.ModelAdmin):
    inlines      = [TaskCommentsInlineAdmin, ]

    def add_view(self, request, form_url = '', extra_context = None):
        self.readonly_fields = ()
        return super(TaskListAdmin, self).add_view(request, form_url, extra_context)

    def change_view(self, request, form_url = '', extra_context = None):
        self.readonly_fields = ('task_name', 'description', )
        return super(TaskListAdmin, self).change_view(request, form_url, extra_context)

ここでは、モデルTaskCommentsがTaskListでインラインとして使用されています。

シナリオ1

ここで私が達成したいのは:

タスクコメントを追加する場合

  • フィールド「time」を非表示にして、バックエンドで更新します。
  • 「コメント」と入力して保存できます。

コメントを保存して開くとき

  • 「時間」フィールドと「コメント」フィールドの両方が表示され、すでに追加されたコメントに対して読み取り専用である必要があります。
  • 上記のように新しいコメントを追加することができます。

シナリオ2

  • 前のシナリオと同じです。
  • 唯一の追加は、コメントを追加したユーザーはコメントを編集可能にし、他のすべてのユーザーは読み取り専用にする必要があることです。(コメントを追加したユーザーを更新して取得できます)。

これらは私が達成したいことです。adminでadd_viewchange_viewを使用してみました。しかし、彼らはインラインで働いていません。これらを実現するためのソリューションを提供してください。前もって感謝します。

4

1 に答える 1

0

以下のクラスのカスタム バージョンを使用するカスタム バージョンの InlineAdmin を使用する必要があります。

  • InlineModelAdmin
  • BaseInlineFormSet

InlineModelAdmin のカスタム バージョンに独自の add_view と change_view を追加して、

  • レコードの所有者を検出する (編集を許可するため)
  • 時間フィールドを表示する

BaseInlineFormSet を拡張して、実行時のすべての側面を制御できます

于 2012-08-05T07:08:52.293 に答える