Python 如何使数据库字段在Django中不可更改?

Python 如何使数据库字段在Django中不可更改?,python,database,django,orm,Python,Database,Django,Orm,假设我有汽车,卡式车,以及它们的建造日期,如下所示: 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(BuildDa

假设我有
汽车
卡式车
,以及它们的
建造日期
,如下所示:

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
之间是共享的,因此我要确保:如果一个
CarTypes
t1
BuildDate
已更改,其他CarTypes不受影响,它们仍然共享相同的BuildDate
d0
——但不与现在具有
d1
t1
共享。我认为有必要为该
CarType
t1
创建一个新的
BuildDate
d1
。有没有推荐或推荐的方法可以做到这一点

使用“可编辑”属性。当您设置“False”时,元素将不会显示在管理中,也就是说,您不能更改其值

例如


license\u name=models.CharField(max\u length=64,editable=False)

拥有一个不同的模型应该如何产生更快的查询?是否要共享几个用例?从cars\u car、cars\u type、cars\u builddate中选择cars\u builddate.begin>=x和cards\u builddate.end Err。。。您真的确定添加内部联接会使查询速度更快吗?如果是,我想知道您正在使用哪个SQL数据库。就我而言,我从未见过添加连接会产生这样的结果,恰恰相反-事实上,甚至有一个名为“非规范化”的小游戏,你可以通过去掉连接来用原子性换取性能…:(是的,在关系数据库世界中,有这样的人真的认为任何模式都应该是“第六范式”(“行包含一个主键,最多包含一个非键列”)xD.FWIW这样的家伙会因为使用“ORM”而把你送进监狱,甚至用于在数据库之外编写任何类型的域逻辑。现在,您可以选择这样做,或者只做任何一个明智的开发人员都会做的事情:摆脱
BuildDate
模型,并将开始/结束日期存储在
类型
模型中。您将为自己和世界省下很多痛苦。