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

标签 django django-admin

嗨。我在阅读以下问题后提出这个问题: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)

这里模型TaskCommentsTaskList中被用作内联。

场景 1

我想要实现的是:

添加任务评论时

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

保存评论后打开

  • 对于已添加的评论,“时间”和“评论”字段均应可见且只读。
  • 能够按照上述方式添加新评论。

场景 2

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

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

最佳答案

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

  • 内联模型管理
  • BaseInlineFormSet

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

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

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

关于Django 内联-允许添加禁用编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11574795/

相关文章:

Django 自动更新用户; save() 得到一个意外的关键字参数 'force_insert'

django - ImportError : libjpeg. so.8: 无法打开共享对象文件: 没有这样的文件或目录

python - 如何在 Jinja 中实现类似 Django 的标签

css - Django-filer 在管理站点中呈现不正确

python - 在 Django Admin 中的自定义列表过滤中将 modeladmin 作为参数传递

python - 使用注释代替模型属性

python - 迭代列表并将该值用作字典键

python - 字段错误无法将关键字 'likes' 解析为字段。选择是 : id, name, page

django - 覆盖password_validation消息

django - 当通过管理站点修改 Django CharField 时发送电子邮件通知