4

你好。我在阅读以下问题后提出这个问题:Question_1Question_2。Question_1 没有任何适当的答案,并且 Question_2 有替代解决方案,但不是完美的解决方案。

在这里,我有两个模型和管理员。

模型.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)

管理员.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

这里我想要实现的是:

添加任务注释时

  • 隐藏“时间”字段并在后端进行更新。
  • 能够输入“评论”并保存。

保存评论后打开时

  • 对于已添加的评论,“时间”和“评论”字段都应该是可见的和只读的。
  • 能够如上所述添加新评论。

情景 2

  • 与之前的场景相同。
  • 唯一的补充是,评论应该对添加它的用户是可编辑的,并且对所有其他用户是只读的。(我可以更新并获取添加评论的用户)。

这些是我想要实现的目标。我尝试在管理员中使用add_viewchange_view。但他们不适用于内联。请提供解决方案来实现这些目标。提前致谢。

4

1 回答 1

0

您必须使用自定义版本 InlineAdmin 它使用以下类的自定义版本

  • 内联模型管理员
  • BaseInlineFormSet

您可以在自定义版本的 InlineModelAdmin 上添加自己的 add_view 和 change_view 到

  • 检测记录的所有者(允许编辑)
  • 显示时间字段

您可以增强 BaseInlineFormSet 以控制所有运行时方面

于 2012-08-05T07:08:52.293 回答