2013-01-03 4 views
1

사용자 정의 필드가 /app/models.py에 있습니다. 내 질문은 ...Django에서 사용자 정의 필드를 추가하는 모범 사례

여기서 가장 좋은 방법은 무엇입니까? 별도의 파일 즉, customField.py을 가져오고 models.py으로 가져 오거나 모두 동일한 models.py 파일에 있어야합니까? 가장 좋은 방법

class HibernateBooleanField(models.BooleanField): 

    __metaclass__ = models.SubfieldBase 

    def get_internal_type(self): 
     return "HibernateBooleanField" 

    def db_type(self): 
     return 'bit(1)' 

    def to_python(self, value): 
     if value in (True, False): return value 
     if value in ('t', 'True', '1', '\x01'): return True 
     if value in ('f', 'False', '0', '\x00'): return False 

    def get_db_prep_value(self, value, *args, **kwargs): 
     return 0x01 if value else 0x00 

답변

1

내가 별도의 fields.py에 당신의 사용자 정의 필드를 둘 것입니다.

django.contrib에서 일부 응용 프로그램에서보세요, 대부분의 표준에 따라 하나의 models.py, fields.py, views.py, middleware.py

의 일반적인 구조를 가지고 당신의 응용 프로그램이 잘 알고 누구에 의해 선택 될 수 있다는 것을 의미한다 장고 프레임 워크를 쉽게.

+0

나는이 아이디어가 수입을 의미하는 것처럼 좋아합니다. ie app.fields에서 가져 오기 import customBooleanField – Prometheus

1

나는 1 개 models.py 파일에 모든 것을 가지고 권 해드립니다하지 않을 것입니다. 모델, 필드 및 뷰에 대해 별도의 패키지를 만들고 싶습니다. 그러면 추가 모듈이 포함됩니다. Django 응용 프로그램의 코드 구조와 가독성을위한 최상의 솔루션 중 하나라고 생각합니다. 그것은 다음과 같습니다

/app 
    /models 
    /__init__.py 
    /model1.py 
    /model2.py 
    /fields 
    /__init__.py 
    /custom_field1.py 
    /custom_field2.py 
    /views 
    /__init__.py 
    /page1.py 
    /page2.py 
+0

그래서 자신의 폴더에 있습니까? 또한 각 모델을 클래스 (즉, 클래스)로 나눠 말하고 있습니까? – Prometheus

+0

예, 더 읽기 쉽고 깨끗하게 보입니다. 하나의 파일에 150/200 미만의 코드 줄을 갖고 싶습니다. 이것은 하나 이상의 클래스에서 일반적으로 가능하지 않습니다. – davekr

+0

이것은 복잡성이있는 앱에 대한 완전한 잔인 함입니다. 앱에 10 개의 모델이 있다면 각각에 대해 별도의 파일이 필요합니까? –

관련 문제