2010-11-24 4 views
3

양식 ("이름": 입력란에 입력 필드에 대해 상황에 맞는 도움말을 제공하고 싶습니다. 이름이 여러 개인 경우 이름을 모두 입력하십시오.). 소스 코드로 하드 ​​코딩하는 대신 관리자 인터페이스를 통해 편집 가능한 도움말 텍스트를 만들고 싶습니다. 내 생각은 어떻게 든 필드 클래스를 확장하고 (verbose_name과 비슷한 새 특성 포함) 데이터베이스에 저장합니다. (아마도 3 열 테이블 '모델, 필드, 도움말'로 충분할 것입니다.)데이터베이스에 저장 될 Django 필드에 설명을 추가하는 방법은 무엇입니까?

그러나 이것이 가능한지 아니면 이전에 완료되었는지는 알 수 없습니다. 너? 그것이 아닌 경우 어디에서 시작해야 할 지 알려주실 수 있습니까?

답변

3

폼의 모든 필드에는 이미 help_text이 포함되어 있지만 Form 클래스의 필드에 매개 변수로 선언해야합니다.

예를 들어, 개인적으로

class SomeForm(forms.Form): 
    some_field1 = forms.CharField(verbose_name="Some Field 1", max_length=100, help_text="Please the first field.") 
    some_field2 = forms.CharField(verbose_name="Some Field 2", max_length=100, help_text="Please the second field.") 

, 나는 데이터베이스가 아닌 필드에 연결된 형태로있는의 혜택을 볼 수 없습니다.

편집 :

그래서 도움말 텍스트를 무시할 수 있습니다. 먼저 폼에서 help_text를 재정의하려는 각 양식에 대한 사전이 있다고 가정 해 보겠습니다.

my_form = SomeForm() 
for field_name, new_help_text in my_form_override_help_text_dict.items(): 
    my_form.fields[field_name].help_text = new_help_text 

를 한 다음 렌더링하기 전에 컨텍스트에 my_form을 추가 컨텍스트를 렌더링하기 전에 다음과 같은 사전과 양식을 재 처리 할 수있다.

이제 도움말 텍스트를 저장하려는 위치와 방법을 선택하십시오. 예를 들면, 세 개의 문자 필드 (모델 이름, 필드 이름, 도움말 텍스트)와 ModelFieldHelp을 만드는 솔루션은 귀하의 모든 모델이 프로세스를 자동화하기 위해 지금은 이해 할 수

class ModelHelpField(models.Model): 
    model_name = CharField(max_length=50) 
    field_name = CharField(max_length=50) 
    new_help_text = CharField(max_length=50) 

field_help_qs= ModelHelpField.objects.filter(model_name='SomeModel') 
my_form_override_help_text_dict = dict([(mfh.field_name, mfh.new_help_text) for mfh in field_help_qs]) 

같은 것을 필요로 작동합니다 (정의되지 않은 경우) 자동으로 만들어지고 초기화 된 후 현재 도움말 텍스트로 자체를 업데이트하는 함수를 양식 또는 모델에 정의하여 양식을 작성한 경우 ...

+0

포인터를 보내 주셔서 감사합니다. 하나. 데이터베이스에서 도움말 텍스트를 유지하는 이점은 도움말 텍스트 작성 담당자가 해당 텍스트를 변경하려는 경우 소스를 변경할 필요가 없다는 것입니다. 그 텍스트가 바뀌어도 출시를해야하지도 않습니다. –

+0

그 말이 맞는 것 같지만 입력 필드가 수정되지 않습니다 (예 : 이름을 편집 할 수 없음, 길이를 편집 할 수 없음, 순서를 편집 할 수 없음). 도움말을 동적으로 편집하는 것이 적절하지 않은지 잘 모르겠습니다. 본문. 어쩌면 템플릿을 편집하게할까요? 그러나 어쨌든 그것은 hackish 방법으로 수행 될 수 있습니다. 나는 곧 편집 할 것이다. –

+0

동적 테이블을 만들기 위해 필드를 사용하는 대신 데이터베이스에 저장하는 것이 좋습니다. – Logic1

관련 문제