当我更改 Django 管理中模型的字段时该怎么做?

Red*_*eda 4 django django-models django-admin django-views

我目前有一个调用is_active模型的布尔字段。每当我在 Django 管理中手动设置此字段True(最初它是 false)时,我希望它执行某个操作。当设置为 时,如何触发 Django 中的此字段来执行此特定操作True

我听说过一种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
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 10

您确实可以save_model(..)重写ModelAdmin. 该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)
Run Code Online (Sandbox Code Playgroud)