【问题标题】:Django inline - allow adding disable editingDjango inline - 允许添加禁用编辑
【发布时间】:2012-07-19 11:04:22
【问题描述】:

嗨。我在阅读以下问题后提出这个问题:Question_1Question_2。 Question_1 没有任何合适的答案,而 Question_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

这里我想要实现的是:

添加任务 cmets 时

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

保存cmets后打开时

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

场景 2

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

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

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

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

    • InlineModelAdmin
    • BaseInlineFormSet

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2015-05-21
      • 2018-01-29
      • 2019-10-17
      相关资源
      最近更新 更多