2014-09-01 117 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,可编辑=假)

相关问题