Touha
Touha

Reputation: 617

how to change a value of an entry dynamically on change of another value from django-admin

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

Answers (1)

Adelin
Adelin

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

Related Questions