Django 内联-允许添加禁用编辑

2024-01-14

你好。我在阅读以下问题后提出这个问题:问题_1 https://stackoverflow.com/q/2951781/1095090 and 问题2 https://stackoverflow.com/q/9504371。 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)

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)

这里是模型任务评论被用作内联TaskList.

场景1

我想要实现的是:

添加任务注释时

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

保存评论后打开时

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

场景2

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

这些是我想要实现的目标。我尝试过使用add_view and 更改视图在管理中。但它们不适用于内联。请提供一个解决方案来实现这些目标。提前致谢。


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

  • 内联模型管理
  • 基本内联表单集

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 内联-允许添加禁用编辑 的相关文章