Reputation: 617
from django.contrib import admin
from .models import Order
class OrderAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'product', 'email','is_valid','is_delivered', 'order_date')
list_display_links = ('id', 'name',)
list_editable = ('is_valid','is_delivered')
search_fields = ('name', 'email', 'product')
list_per_page = 25
admin.site.register(Order, OrderAdmin)
Here, when 'is_valid' is changed by the admin, I want to decrement the value of another integer field by 1
Upvotes: 2
Views: 276
Reputation: 8209
Since you are only interested in adding some pre-save operation from the ModelAdmin
, you should override save_model
method, decrement the said value, and trigger the Model.save()
method:
from django.contrib import admin
class OrderAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'product', 'email','is_valid','is_delivered', 'order_date')
list_display_links = ('id', 'name',)
list_editable = ('is_valid','is_delivered')
search_fields = ('name', 'email', 'product')
list_per_page = 25
def save_model(self, request, obj, form, change):
# decrement logic here and then trigger save as below
# you have access to the model through obj and form data through form
# e.g.: obj.is_valid and form.changed_data are here
super().save_model(request, obj, form, change)
admin.site.register(Order, OrderAdmin)
Upvotes: 2