django orm-确保在通过admin_操作更新queryset时调用clean()

django orm-确保在通过admin_操作更新queryset时调用clean(),django,django-models,django-admin,Django,Django Models,Django Admin,如何确保在执行queryset.update('somefield'=True)时调用clean()方法。我还需要确保捕获由clean()方法引发的任何ValidationError 我对django ORM几乎没有经验。任何帮助都将不胜感激。在使用queryset的update函数时,不会调用模型的clean方法。看一看这张照片 您必须编写自己的admin_操作,以确保调用该方法。书中有一些例子 我想你想要像这样的东西- from django.contrib import admin fro

如何确保在执行
queryset.update('somefield'=True)
时调用
clean()
方法。我还需要确保捕获由
clean()
方法引发的任何
ValidationError


我对django ORM几乎没有经验。任何帮助都将不胜感激。

在使用queryset的
update
函数时,不会调用模型的
clean
方法。看一看这张照片

您必须编写自己的admin_操作,以确保调用该方法。书中有一些例子

我想你想要像这样的东西-

from django.contrib import admin
from yourapp.models import YourModel

def update_and_clean(modeladmin, request, queryset):
    for obj in queryset:
         obj(some_field=True)
         obj.clean()
         obj.save()

class YourModelAdmin(admin.ModelAdmin):
    actions = [update_and_clean]

admin.site.register(YourModel, YourModelAdmin)

使用queryset的
update
函数时,不会调用模型的
clean
方法。看一看这张照片

您必须编写自己的admin_操作,以确保调用该方法。书中有一些例子

我想你想要像这样的东西-

from django.contrib import admin
from yourapp.models import YourModel

def update_and_clean(modeladmin, request, queryset):
    for obj in queryset:
         obj(some_field=True)
         obj.clean()
         obj.save()

class YourModelAdmin(admin.ModelAdmin):
    actions = [update_and_clean]

admin.site.register(YourModel, YourModelAdmin)

这太棒了。谢谢@aidan帮助我。您添加的示例肯定让事情变得非常清楚。所以我想,我只需要为异常添加一个try/except块。:)哦,是的,我忘了你提到过捕捉异常。是的,您可以将您的try/except放在更新和清除方法中。酷!我只是希望/尝试一个解决方案,这样我就不必遍历所有对象并单独保存它们。对那句话有什么想法吗?恐怕没有。这就是更新函数的要点,它运行SQL更新。除了编写一些自定义SQL来完成这项工作之外,我认为您还需要迭代django对象。这太棒了。谢谢@aidan帮助我。您添加的示例肯定让事情变得非常清楚。所以我想,我只需要为异常添加一个try/except块。:)哦,是的,我忘了你提到过捕捉异常。是的,您可以将您的try/except放在更新和清除方法中。酷!我只是希望/尝试一个解决方案,这样我就不必遍历所有对象并单独保存它们。对那句话有什么想法吗?恐怕没有。这就是更新函数的要点,它运行SQL更新。除了编写一些定制的SQL来完成这项工作之外,我认为您还需要迭代django对象。