Created
June 23, 2011 20:06
-
-
Save ajamaica/1043502 to your computer and use it in GitHub Desktop.
ReadOnlyField On Admin Fixed for 1.3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.contrib import admin | |
import datetime | |
from django import forms | |
class ReadOnlyWidget(forms.Widget): | |
def __init__(self, original_value, display_value): | |
self.original_value = original_value | |
self.display_value = display_value | |
super(ReadOnlyWidget, self).__init__() | |
def render(self, name, value, attrs=None): | |
if self.display_value is not None: | |
return unicode(self.display_value) | |
return unicode(self.original_value) | |
def value_from_datadict(self, data, files, name): | |
return self.original_value | |
class ReadOnlyAdminFields(object): | |
def get_form(self, request, obj=None): | |
form = super(ReadOnlyAdminFields, self).get_form(request, obj) | |
if hasattr(self, 'readonly') and obj is not None: | |
for field_name in self.readonly: | |
if field_name in form.base_fields: | |
if hasattr(obj, 'get_%s_display' % field_name): | |
display_value = getattr(obj, 'get_%s_display' % field_name)() | |
else: | |
display_value = None | |
if getattr(obj, field_name).__class__ in [unicode , long, int, float, datetime, list]: | |
form.base_fields[field_name].widget = ReadOnlyWidget(getattr(obj, field_name), display_value) | |
else: | |
form.base_fields[field_name].widget = ReadOnlyWidget(getattr(obj, field_name).id, display_value) | |
form.base_fields[field_name].required = False | |
return form | |
return form | |
# Model | |
# field = ForeignKey(OtherMother) | |
# field2 = ManyToMany(OtherMother) | |
class ModelAdmin(ReadOnlyAdminFields, admin.ModelAdmin): | |
def get_form(self, request, obj=None, **kwargs): | |
ReadOnlyAdminFields.readonly = ('field','field2') | |
return super(ModelAdmin, self).get_form(request, obj, **kwargs) | |
admin.site.register(Model,ModeloAdmin) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment