2009-06-02 5 views
0

내 클래스에는 약 12 필드이 있습니다. 한 필드는 상태 인이고 다른 하나는 인 이유는입니다. 내가 장고 관리에서 편집 페이지로 이동하면 상태가 == '거부'인 경우에만 두 번째 필드 (이유 필드)를 표시하려고합니다. 문제는 매우 간단합니다. 사용자 입력에 따라 필드를 보여줍니다.사용자 선택에 따라 옵션이 변경됩니다.

답변

3

이 작업을 서버 측에서 수행하는 쉬운 방법은 없습니다. 그러나 JavaScript를 사용하여 상태를 기반으로 이유 필드의 가시성을 전환하는 것이 상대적으로 쉽습니다.

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

$(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 클래스에서 참조해야 할 양식은 자바 스크립트 파일을로드하도록하려면 : 다음은 jQuery를 사용하여 예입니다

이 솔루션은 Django 관리자 내에서 원활하게 작동해야합니다.

0

변경 목록을 언급하고 있는지 또는 항목의 개별 편집 페이지를 언급하고 있는지 확실하지 않습니다. 후자의 경우 @ Guðmundur H는 좋은 jQuery 솔루션을 제공합니다. 이전 모델 인 경우 reason_if_rejected 모델에 메소드를 제공하면 상태가 '거부 됨'인 경우 이유를 반환하고 그렇지 않으면 빈 문자열을 반환합니다. 그런 다음 list_display 설정에이 메소드의 이름을 포함 할 수 있습니다.

관련 문제