Entfernen von Feldern aus ModelForm
habe ich eine einfache ModelForm:
class MyForm(ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
del self.fields['name']
Wie Sie sehen, kann ich versuchen, Sie zu entfernen Sie ein Feld aus der Formular-Liste Feld (das Feld endgültig im Modell vorhanden), aber ich bekomme eine Exception:
TemplateSyntaxError at [..]
Caught an exception while rendering: "Key 'name' not found in Form"
Ich nicht schreiben ein benutzerdefiniertes Formular, also die Vorlage, wo der Fehler Auftritt ist:
/templates/admin/includes/fieldset.html, error at line 4
Irgendwelche Ideen?
-- UPDATE --
Scheint das problem nur in den admin-Bereich.
-- UPDATE 2 --
Vielleicht eine trace-dump gibt mehr 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 den admin-Bereich, ich benutze die Grapelli-Thema. Vielleicht hat das mit dem problem zu tun?
- Magisch™ funktioniert es jetzt, obwohl ich nicht weiß, warum. Trotzdem danke für deine Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem. Dies ist, wie ich es in der neuen Django (Rumpf):
Durch überschreiben der
get_form
- Methode und setzen die Logik hier können Sie auswählen, welcheForm
Sie dargestellt haben möchten. Habe ich oben angezeigt die standard-form, wenn eine Bedingung erfüllt wird.MyModelAdmin
mitexclude = []
(oder was auch immer die Basis ausgenommen sind) und dannself.exclude.append('field')
wenn die Bedingungen erfüllt sind.user.is_staff
ist eine Eigenschaft, keine Methode, so ruft es wirft einen Fehler.obj=obj
als zweites argument an die super-Methode der Klasse aufrufen?Wie beschrieben in Erstellen von Formen von Modellen - die Auswahl der Felder verwenden, gibt es drei Möglichkeiten:
editable=False
. Alle Formulare erstellt, aus dem Modell ausgeschlossen werden, das Feld.fields
Attribut in derMeta
innere Klasse, um nur die Felder, die Sie wollen.exclude
Attribut in derMeta
innere Klasse, um eine Liste der Felder, die Sie nicht wollen.Also, wenn Ihr Modell hat die Felder
field1
,field2
, undfield3
und Sie nicht möchten, dassfield3
Technik #2 würde dann wie folgt Aussehen:Technik und #3 würde so Aussehen:
editable=false
sollteeditable=False
😉Dieser funktioniert Super...
Einer Ursache, die ich denken kann, ist, wenn Ihr ModelAdmin welche Klasse verwendet Ihr benutzerdefiniertes Formular widersprüchliche Einstellungen. Zum Beispiel, wenn Sie auch explizit angegebenen Feld "name" in "Felder" oder "fieldsets" von Ihrem ModelAdmin.
Können Sie die exclude-Eigenschaft zu entfernen Felder aus einer ModelForm