2009-06-02 7 views
0

In meiner Klasse habe ich über 12 Felder. Ein Feld ist Status, ein anderes ist Grund. Wenn ich auf die Bearbeitungsseite im django admin gehe, möchte ich nur das zweite Feld (Grundfeld) anzeigen, wenn der Status == 'abgelehnt' ist. Das Problem ist sehr einfach: Zeigen Sie einfach die Felder entsprechend der Benutzereingabe.Ändern von Optionen nach der Benutzerwahl

Antwort

3

Es gibt leider keine einfache Möglichkeit, dies rein serverseitig zu machen. Es sollte jedoch relativ einfach mit etwas JavaScript zu erreichen sein - die Sichtbarkeit des Grundfeldes wird basierend auf dem Status umgeschaltet. Im Folgenden ist ein Beispiel mit jQuery:

$(document).ready(function() { 
    // Toggle visibility on page load 
    setReasonVisibility(); 

    // Toggle visibility on status change 
    $('form #id_status').bind('change', setReasonVisibility) 

    function setReasonVisibility() { 
     var form = $('form'); 
     var status = $(form).find('#id_status').val(); 
     if (status == 'rejected') 
      $(form).find('#id_reason').show(); 
     else 
      $(form).find('#id_reason').hide(); 
    } 
}); 

Um die Form der JavaScript-Datei laden, müssen Sie es in einer Media Klasse in das Formular für Ihr Modell finden, irgendwie wie folgt aus:

class YourModelForm(forms.ModelForm): 
    class Meta: 
     model = YourModel 
    class Media: 
     js = ('path/to/jquery.js', 'path/to/your-js-file.js') 

Diese Lösung sollte nahtlos innerhalb des Django-Administrators funktionieren.

0

Es ist mir nicht klar, ob Sie auf die Änderung Liste oder die individuelle Bearbeitungsseite für einen Artikel beziehen. Wenn letzteres, @ Guðmundur H hat eine gute jQuery-Lösung. Wenn dies der Fall ist, können Sie dies tun, indem Sie eine Methode für Ihr Modell bereitstellen: reason_if_rejected, die den Grund zurückgibt, wenn der Status 'rejected' lautet, und andernfalls eine leere Zeichenfolge zurückgibt. Sie können dann den Namen dieser Methode in Ihre list_display Einstellung aufnehmen.

Verwandte Themen