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不受影响,它们仍然共享相同的BuildDated0
——但不与现在具有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
模型,并将开始/结束日期存储在类型
模型中。您将为自己和世界省下很多痛苦。