2012-07-20 42 views
4

嗨。我在阅读以下问题后问这个问题:Question_1Question_2。 Question_1没有任何适当的答案,Question_2有另一种解决方案,但不是完美的解决方案。Django内联 - 允许添加禁用编辑

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

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被在任务列表用作内联。

方案1

在这里我想要实现的是:

当添加任务评论

  • 隐藏字段 “时间”,并在后台更新。
  • 能够输入“注释”并保存。

当保存评论

  • 后打开两个“时间”和“备注”栏应为已添加注释可见和只读。
  • 能够添加新评论,如上所述。

方案2

  • 同前面的方案。
  • 唯一的补充是,对于为其他用户添加和只读的用户,该评论应该是可编辑的。 (我可以更新并获取添加评论的用户)。

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

回答

0

你必须使用它使用下面的类

  • InlineModelAdmin
  • 的定制版本的定制版本InlineAdmin BaseInlineFormSet

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

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

可以提升BaseInlineFormSet控制所有运行方面

相关问题