Django内联 - 允许添加禁用编辑 [英] Django inline - allow adding disable editing

查看:243
本文介绍了Django内联 - 允许添加禁用编辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

models.py

  class TaskList(models。模型):
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):
返回%s%(self.task_name)

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

def __unicode __(self):
return

def save(self,* args,** kwargs):
self.time = datet ime.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_url ='',extra_context = None)
self.readonly_fields =()
返回超级(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请求,form_url,extra_context)

这里模型 TaskComments 正在被用作inline in TaskList



场景1



这里我想要实现的是:



添加任务注释




  • 隐藏字段time并更新

  • 可以输入评论并保存。



保存评论后打开




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



场景2




  • 与以前的情况相同。

  • 唯一的补充是,评论应该可以编辑用户为其他用户添加并只读。 (我可以更新并获得添加评论的用户)。



这些是我想要实现的。我尝试在管理员中使用 add_view change_view 。但是它们不适用于内联。请提供一个解决方案来实现这些事情。感谢提前。

解决方案

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




  • InlineModelAdmin

  • BaseInlineFormSet



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




  • 检测记录的所有者(允许编辑)

  • 显示时间字段



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


Hi. I am asking this question after reading the following questions: Question_1 and Question_2. Question_1 doesn't have any appropriate answers and Question_2 is having an alternative solution but not a perfect solution.

Here I have two models and admins for them.

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)

Here the model TaskComments is being used as inline in TaskList.

SCENARIO 1

Here what I want to achieve is:

When Adding task comments

  • Hide the field "time" and update it in backend.
  • Able to type "comments" and save.

When opening after saving comments

  • Both "Time" and "Comments" field should be visible and readonly for already added comments.
  • Able to add new comments as described above.

SCENARIO 2

  • Same as previous scenario.
  • The only addition is, the comment should be editable for the user who added it and readonly for all other users. (I can update and get the user who adds the comment).

These are the things I would like to achieve. I have tried using add_view and change_view in admin. But they are not working for inline. Please provide a solution to achieve these things. Thanks in advance.

解决方案

You have to use the custom version InlineAdmin which uses the custom version of below classes

  • InlineModelAdmin
  • BaseInlineFormSet

You can add your own add_view and change_view on the custom version of InlineModelAdmin to

  • detect the owner of the record(to allow the edit)
  • display the time field

You can enhance the BaseInlineFormSet to control all the runtime aspects

这篇关于Django内联 - 允许添加禁用编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆