views:

674

answers:

3

I want to inherit a model class from some 3rd party code. I won't be using some of the fields but want my client to be able to edit the model in Admin. Is the best bet to hide them from Admin or can I actually prevent them being created in the first place?

Additionally - what can I do if one of the unwanted fields is required? My first thought is to override the save method and just put in a default value.

+2  A: 

If you are inheriting the model then it is probably not wise to attempt to hide or disable any existing fields. The best thing you could probably do is exactly what you suggested: override save() and handle your logic in there.

Andrew Hare
+2  A: 

Rather than inherit, consider using customized Forms.

  1. You can eliminate fields from display that are still in the model.

  2. You can validate and provide default values in the form's clean() method.

See http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin

S.Lott
+1, together with the ModelAdmin override using forms is the best solution IMO.
muhuk
+1  A: 

You can control the fields that are editable in admin.

From the Django docs:

"If you want a form for the Author model that includes only the name and title fields, you would specify fields or exclude like this:

class AuthorAdmin(admin.ModelAdmin): fields = ('name', 'title')

class AuthorAdmin(admin.ModelAdmin): exclude = ('birth_date',)"

http://docs.djangoproject.com/en/dev/ref/contrib/admin/

Harold