2013-01-03 58 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.pyfields.pyviews.pymiddleware.py

遵循這一標準的通用結構意味着您的應用程序可以由任何人熟悉拾起Django框架輕鬆。

+0

我喜歡這個想法,因爲導入有意義,即從app.fields導入customBooleanField – Prometheus

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個模型,你會爲每一個單獨的文件? –

相關問題