2010-01-18 2 views
27

뒤로 Model 클래스를 만들었습니다. 그것을 위해 여러 개의 ModelForm을 만들었고 아름답게 작동했습니다.Django 모델의 숨겨진 필드

최근에 다른 선택적 (blank = True, null = True) 필드를 추가해야 사용자간에 관계 데이터를 저장할 수 있습니다. 본질적으로 추천 시스템입니다.

문제는이 새로운 필드를 추가하면 제외시키려는 ModelForm을 변경하지 않은 참조 필드가 표시된다는 것을 의미합니다. 일반적으로 이것은 단지 10 분이 지나고 제외되는 것을 의미 할 것입니다. 그러나이 경우에는 프로젝트 관리 정치로 인해 통제가 불가능하기 때문에이 애플리케이션의 모델 만 제어 할 수 있습니다. 나도

을 수 :

  • 필드는 자동 제외로 설정?
  • 숨김으로 렌더링되도록 설정하십시오 (완벽하지는 않더라도 수용 가능)? Using a subset of fields on the form에 문서에서

답변

47

은 :

모델 필드에 거짓 = 편집 설정합니다. 결과적으로 ModelForm을 통해 모델에서 생성 된 양식에는 해당 필드가 포함되지 않습니다.

+2

매직 :

선택적으로 ModelAdmin에 exclude를 사용하여 필드를 숨길 수있다, 여기에 내가 일하고 있어요 뭔가에서 미리보기입니다. 내가 필요한 방식으로 정확하게 작동합니다. 고맙습니다! – Oli

+7

당신은 인정해야합니다, 이것은별로 의미가 없습니다. 필드를 읽기 전용으로 설정하려면 어떻게해야합니까? 그것은 editable = False가 숨기는 대신에해야 할 일입니다. –

+0

@ JustinY 내 생각은 정확하게. –

4

사용자 정의 모델 필드 하위 클래스를 정의하고 formfield() 메서드를 재정 의하여 HiddenInput 위젯으로 필드를 반환 할 수 있습니다. the documentation for custom fields을 참조하십시오.

+0

예, 나는 Ofri의 대답 전에 이것을보고있었습니다. 솔직히 내가 원하는 것을 할 수있는 간단한 방법이있어서 기쁩니다. 물론 사용자 정의 필드가 필요한 시나리오도 있습니다. 귀하의 답변에 감사드립니다. – Oli

66

템플릿에 액세스 할 수있는 경우 당신은 다음 코드를 사용하여 숨겨진 필드가 렌더링 수 : 대신에 표준의

{{ form.field_name.as_hidden }} 

: 당신은 당신이 사용할 수 없다는 언급하지만

{{ form.field_name }} 
+13

"as_hidden"속성을 어떻게 파악 했습니까? 나는 장고 문서에서 그것을 찾을 수 없었다. 나도 그것을 사용하는 방법을 알아 내려고 노력하고 있었고 지금 당신에게 감사드립니다. – iJK

+13

장고 소스 코드를 읽어서 알아 냈습니다. 난 정말 장고의 소스를 조사하는 것이 좋습니다 수 있습니다. 정말 이해하기 쉽고 구조가 잘되어 있습니다. –

+2

+1이 속성이 있어야한다는 것을 알고있었습니다. – russjman

1

귀하의 사례에서 배제, 나는이 답변을 발견 한 다른 사람들이 (제목과 같은 나 자신과 마찬가지로) 도움이 될 것이라고 생각합니다.

class ItemsAdmin(admin.ModelAdmin): 
    form = ItemsForm 
    actions = None 
    list_display = ('item_id', 'item_type', 'item_title', 'item_size', 'item_color',) 
    search_fields = ('item_id', 'item_title',) 
    inlines = [ImageInline,] 
    readonly_fields = ('disable_add_date','disable_remove_date',) 
    exclude = ('add_date', 'remove_date',) 
    ###.............