【问题标题】:How to notify user when django's custom action doesn't behave as expected?当 django 的自定义操作未按预期运行时如何通知用户?
【发布时间】:2010-02-15 09:58:51
【问题描述】:

我正在为 django 管理员编写自定义操作。此操作仅适用于具有特定状态的记录。

例如,“批准博客”自定义操作应仅在博客未获批准时批准用户博客。 它不得批准被拒绝的博客

一种选择是过滤未批准的博客,然后批准它们。但仍有可能被拒绝的博客获得批准。

如果用户尝试批准被拒绝的博客,自定义操作应通知用户有关 django 管理中的无效操作。

有什么办法吗?

【问题讨论】:

  • “但是被拒绝的博客仍然有可能被批准” - 那么你的过滤逻辑是错误的。向我们展示您的模型,我们或许可以提供帮助!
  • 商业规则说被拒绝的博客不能被批准......
  • 那么approvedrejected 在您的Blog 模型中是单独的BooleanField 吗?我们可以像这样来回切换 - 或者您可以发布您的模型代码...
  • 不存在整数类型的状态字段,它跟踪所有状态......它被批准,拒绝,草稿等......

标签: python django django-admin


【解决方案1】:

有关管理员操作的文档非常有帮助,所以去take a look

我认为只写一个只更新未被拒绝的博客的操作就应该这样做。

以下代码假设您有变量 rejectedapproved,它们分别映射到表示已拒绝博客和已批准博客的整数值:

class BlogAdmin(admin.ModelAdmin):

    ...
    actions = ['approve']
    ...

    def approve(self, request, queryset):
        rejects = queryset.filter(state = rejected)
        if len(rejects) != 0:
            # You might want to raise an exception here, or notify yourself somehow
            self.message_user(request,
                              "%s of the blogs you selected were already rejected." % len(rejects))
            return

        rows_updated = queryset.update(state = approved)
        self.message_user(request, "%s blogs approved." % rows_updated)
    approve.short_description = "Mark selected blogs as approved"

【讨论】:

  • 我会这样做,但我认为 OP 的问题很愚蠢,基于“如果你想取消拒绝某些东西怎么办?”。现在,OP 需要一个自定义操作 unreject,它等效于 approve,但仅适用于 Rejected 项目,它可以将其恢复为 Draft 或 Approved 状态。否则某些事情可能会被不可逆转地拒绝。
  • @jonwd7 - 不是真的 - 大概您仍然可以进入并编辑博客以使其处于草稿或批准状态,您只是无法批量更新博客。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多