我目前在模型上有一个布尔字段,称为“ is_active”。每当我在django admin中手动将此字段设置为True(最初是错误的)时,我都希望它执行某些操作。 设置为true时,如何在django上触发此字段以执行此特定操作?
我听说过save_model()方法,但是我不知道它是如何工作的。
class Company(models.Model):
name = models.CharField(max_length=100, unique=True)
is_active = models.BooleanField(default=False)
def __str__(self):
return self.name
答案 0 :(得分:1)
您确实可以覆盖ModelAdmin
中的save_model(..)
method [Django-doc]。 form
参数在模型管理员中包含Form
,您可以检查.changed_data
[Django-doc]以检查值是否已更改:
from app.models import Company
from django.contrib import admin
class CompanyAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
field = 'is_active'
super().save_model(request, obj, form, change)
if change and field in form.changed_data and form.cleaned_data.get(field):
# ... do a certain action
pass
admin.site.register(Company, CompanyAdmin)