当我在Django admin中为一个模型修改一个字段时,如何做一些事情?

nwlls2ji  于 2022-11-19  发布在  Go
关注(0)|答案(1)|浏览(140)

我在一个模型上有一个布尔值字段is_active。每当我在Django管理中手动将这个字段设置为True(最初是false)时,我希望它执行一个特定的操作。当它被设置为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
lnlaulya

lnlaulya1#

您可以覆盖ModelAdmin中的**save_model(..)方法[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)

相关问题