0

私のクラスには、約12 のフィールドがあります。1 つのフィールドはstatusで、もう1 つのフィールドはreasonです。django admin の編集ページに移動すると、status=='rejected' の場合にのみ 2 番目のフィールド (理由フィールド) を表示したいと考えています。問題は非常に単純です。ユーザー入力に従ってフィールドを表示するだけです。

4

2 に答える 2

3

残念ながら、これを純粋にサーバー側で行う簡単な方法はありません。ただし、ステータスに基づいて理由フィールドの可視性を切り替える JavaScript を使用すると、比較的簡単に実行できるはずです。以下は、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();
    }
});

Mediaフォームに JavaScript ファイルをロードさせるには、次のように、モデルのフォームへのクラスでそれを参照する必要があります。

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

このソリューションは、Django 管理内でシームレスに機能するはずです。

于 2009-06-02T07:56:28.457 に答える
0

変更リストを参照しているのか、アイテムの個々の編集ページを参照しているのかは明確ではありません。後者の場合、@Guðmundur H には優れた jQuery ソリューションがあります。前者の場合、モデルにreason_if_rejectedメソッドを提供することでそれを行うことができます。このメソッドは、ステータスが「拒否」の場合は理由を返し、それ以外の場合は空の文字列を返します。次に、このメソッドの名前をlist_display設定に含めることができます。

于 2009-06-02T15:23:43.123 に答える