2014-12-02 1 views
0

에서 django.db.modelsdjango.forms이 함께 작동하는 방식을 알고 싶습니다. Django (소스 코드에서) 이해 : models.CharField 및 forms.CharField를 통한 필드의 속성

이 예제를 고려하십시오 views에서 generic.edit.FormView를 통해

# models.py 
from django.db import models 
class Person(models.Model) 
    Telefon1 = models.CharField('Telefon', max_length=30, blank=True, null=True) 

표시 양식 필드를 HTML에서 제대로 기본값 'Telefon'로.

# forms.py 
from django import forms 
class ContactForm(forms.ModelsForm): 
    Telefon1 = forms.CharField(widget=forms.TextInput(attrs={'autocomplete':'off'})) 

필드는 제대로 automplete:off 렌더링됩니다 : 자동 완성-기능을 해제하기 위해 나는 다음과 같은 추가합니다. 그러나 필드의 이름이 다시 models 이름에 해당 될 Telefon1

그래서 질문 1 : 나는 models에 정의 된 기본 이름이 통과되고 있는지 확인 또는 내가 이름을 다시 정의 할 필요가 어떻게해야합니까 forms.CharField(widget=...?
질문 2 : 어떻게 소스 코드를 읽는 답을 찾을 수 있습니까? 나는 대답을 포함하지 않거나 이해하지 못했던 site-packages\django\forms\widget.py을 읽기 시작했다.

자습서와 설명서가 항상 나를 위해 (특히이 경우에는) 작동하지 않기 때문에 Django를 소스 코드를 통해 배우고 이해하고 싶습니다.

+0

소스 코드를 읽는 것은 프레임 워크를 배우는 좋은 방법이 아닙니다. Django는 오픈 소스 세계에서 가장 훌륭한 문서 중 일부와 타사 자습서로 가득 찬 전체 인터넷을 보유하고 있습니다. 당신은 거기에서 시작해야합니다. –

답변

1

django.db.models.Fielddjango.forms.Field에 대해 말하는 것은 완전히 다른 두 가지 기계입니다. 그러나 실생활에서 여전히 모델을 매핑해야하는 형식이 필요합니다. 이를 위해 django는 모델의 이름을 전달함으로써 장고 모델 폼의 개념을 제공합니다. 기본 장고 modelforms으로

장고 모델과 동일한 이름을 표시하지만 경우에 당신은 또한 더 이해를 명확히하기 위해 here에 지정된 장고 modelforms에 __init()를 오버라이드 (override) 할 수있는, 이름을 오버라이드 (override) 할 필요가있다.

django의 코드베이스는 이미 개발되었으며 아직 최적화 단계까지 개발 중입니다. 학습의 요점은 깊이 존경 받지만 복잡성으로 떨어지는 것은 효과의 낭비이며 신속한 애플리케이션 개발 기술이라는 목적을 이깁니다.

공식 문서에서 제공되는 내용은 자급 자족하며 충분히 이해할 수있을 정도로 깊습니다. 프레임 워크를 배우는 유일한 방법은 오류 메시지를 배우는 것입니다. 그러면 자동으로이 프레임 워크의 복잡한 마스터가됩니다.