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

最新更新