django - Django:如何检查内联操作是否已执行?
问题描述
我有三个操作,碰巧我必须修复此代码,以便应用程序确保或至少警告用户(仍在定义中)他们跳过了一个步骤。
在我的 admin.py 中,我有三个内联操作:
actions = [clean_data, rel_from_db, send_production]
他们只是以这种方式运行与数据库相关的操作:
def send_production(modeladmin, request, queryset):
for qs in queryset:
qs.clean_data()
我怎样才能停止执行(在循环之前)以确保执行了前面的两个步骤?我可以在 admin.py 中保存一个保持状态的变量吗?我阅读了此解决方案中指示的 ValidationError ,但我很困惑,因为我想验证内联操作(函数)而不是表单字段。
解决方案
所有操作都是完全独立的请求,理论上可以分隔任意时间。这是 Web 服务器的无状态模型的结果。您将需要跟踪模型中的状态并根据其状态进行验证。例如:
class MyModel(models.Model):
NEW = 'new'
CLEANED = 'cleaned'
SEND = 'send' # etc, add more states if needed
state = models.CharField(choices=((NEW, NEW), (CLEANED, CLEANED), (SEND, SEND)), max_length=50, default=NEW)
def send_production(modeladmin, request, queryset):
if queryset.exclude(state=MyModel.CLEANED).exists():
self.message_user(request, 'Some of the selected objects are not cleaned yet', messages.ERROR)
return
for qs in queryset:
qs.send_to_production() # changes .state to MyModel.SEND
推荐阅读
- angularjs - 我的 app.module 提供程序中的多个初始化程序导致我的初始视图不显示
- python-3.x - 为什么 JSON 数据不会进入 Flask 服务器?
- variables - SVG:记录一个元素的坐标以便与另一个元素一起使用(没有 JS)
- http - 如何通过 http 请求从 2 个传感器(从 nodemcu 到 mysql)发送数据
- python - 即使似乎安装了 graphviz,如何在 HPC 集群上安装 pygraphviz 而不会出错?
- android - 无法从缓存加载脚本“C:\src\flutter\packages\flutter_tools\gradle\flutter.gradle”的编译类
- pandas - 函数中的 IF-ELSE 条件抛出 TypeError __floordiv__、ValueError、KeyError
- typescript - 无法使用 Typeorm 更新我的表格?
- juju - 基于 openstack 的部署问题
- sql - 从 Content Store 获取 IBM Cognos Portal 作业运行历史记录