2014-09-01 118 views
0

比方說,我有CarsCarTypes,他們BuildDates這樣的:如何讓數據庫字段在Django中不可更改?

class Car(db.models): 
    licence_name = models.CharField(max_length=64) 
    car_type = models.ForeignKey(Type) 

class Type(db.models): 
    name = models.CharField(max_length=64) 
    build_during = models.ForeignKey(BuildDate) 

class BuildDate(db.models): 
    begin = models.DateField(null=True) 
    end = models.DateField(null=True) 

    class Meta(object): 
     unique_together = (('begin', 'end'),) 

我想有BuildDates在一個單獨的表這樣我可以做的更快的查詢和其他的東西與Django的外部工具。

由於BuildDates是獨一無二的,但CarTypes之間共享,我要確保這一點:一個CarTypet1BuildDated0如果改變了,其他CarTypes不會受到影響,他們仍然共享相同的創建日期d0 - 但與t1現在有d1。我認爲有必要爲該CarTypet1創建一個新的BuildDated1。有沒有建議或推薦的方法來做到這一點?

+0

如何具有應該產生更快的查詢的獨特模式?小心分享幾個用例? – 2014-09-01 13:45:17

+0

SELECT cards_car.id FROM cars_car,cars_type,cars_builddate WHERE cars_builddate.begin> = x和cards_builddate.end <= y AND cars_car.type == cars_type.id AND cars_type.build_during = cars_builddates.id – AME 2014-09-01 14:52:52

+0

Err ... Are you * *真的**確定添加一個內部連接會**真的**使您的查詢更快?如果是,我想知道你正在使用哪個SQL數據庫。就我而言,我從來沒有見過添加連接的結果,恰恰相反 - 事實上,甚至有一個名爲「非規範化」的小遊戲,您通過擺脫連接來交換原子性能以實現性能。 – 2014-09-01 15:00:21

回答

0

使用「可編輯」屬性。當您設置「False」時,元素將不會顯示在管理員中,也就是說,您無法更改其值。

例如

licence_name = models.CharField(MAX_LENGTH = 64,可編輯=假)

相關問題