当我在django管理员上更改模型的字段时如何做

时间:2019-07-19 19:55:21

标签: django django-models django-views django-admin

我目前在模型上有一个布尔字段,称为“ 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

1 个答案:

答案 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)