Remove fields from ModelForm
django
Solution
I had the same problem. This is how I made it work in the new Django (trunk):
class MyModelAdmin(admin.ModelAdmin):
# Your stuff here..
def get_form(self, request, obj=None, **kwargs):
if request.user.is_staff: # condition
self.exclude = ('field',)
return super(PublishAdmin, self).get_form(request, obj=obj, **kwargs)
By overriding the `get_form` method and putting the logic here you can select which `Form` you want to have displayed. Above I have displayed the standard form when a condition was met.
Problem
i have a simple ModelForm: ``` class MyForm(ModelForm): def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) del self.fields['name'] ``` As you can see, I try to remove a field from the form's field list (the field definitively exists in the model), but I get an Exception: ``` TemplateSyntaxError at [..] Caught an exception while rendering: "Key 'name' not found in Form" ``` I did not write a custom form, so the template where the error occurs is: ``` /templates/admin/includes/fieldset.html, error at line 4 ``` Any ideas? -- UPDATE -- The problem appears only in the admin area. -- UPDATE 2 -- Maybe a trace dump gives more info: ``` Original Traceback (most recent call last): File "/Library/Python/2.5/site-packages/django/template/debug.py", line 71, in render_node result = node.render(context) File "/Library/Python/2.5/site-packages/django/template/defaulttags.py", line 155, in render nodelist.append(node.render(context)) File "/Library/Python/2.5/site-packages/django/template/defaulttags.py", line 239, in render value = bool_expr.resolve(context, True) File "/Library/Python/2.5/site-packages/django/template/__init__.py", line 546, in resolve obj = self.var.resolve(context) File "/Library/Python/2.5/site-packages/django/template/__init__.py", line 687, in resolve value = self._resolve_lookup(context) File "/Library/Python/2.5/site-packages/django/template/__init__.py", line 722, in _resolve_lookup current = current() File "/Library/Python/2.5/site-packages/django/contrib/admin/helpers.py", line 81, in errors return mark_safe(u'\n'.join([self.form[f].errors.as_ul() for f in self.fields]).strip('\n')) File "/Library/Python/2.5/site-packages/django/forms/forms.py", line 105, in __getitem__ raise KeyError('Key %r not found in Form' % name) KeyError: "Key 'name' not found in Form" ``` In the admin area, I use the Grapelli-Theme. Maybe this has to do with the problem?