13

How to make a field in Django Admin readonly or non-editable based on the value from another field? I have used readonly_fields=('amount',) but this wont fix my problem , as I need to manage it based on another field .

0

3 Answers 3

29

You can override the admin's get_readonly_fields method:

class MyAdmin(admin.ModelAdmin):

    def get_readonly_fields(self, request, obj=None):
        if obj and obj.another_field == 'cant_change_amount':
            return self.readonly_fields + ('amount',)
        return self.readonly_fields
Sign up to request clarification or add additional context in comments.

1 Comment

Can this be done while maintaing the field ordering?
1

For filling out one field from another, you need to add a prepopulated_fields attribute to the relevant ModelAdmin class. For example:

class PostAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}

The relevant documentation can be found here.

However, in the version of django I'm using at the moment (1.3), this seems to create an error when readonly_fields is also used.

Comments

0

Declare any permanently readonly_fields in the body of the class, as the readonly_fields class attribute will be accessed from validation

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.