如何在django模型中表示具有默认值(在SQL中指定)的列?具有计算列的Django模型
表:
CREATE TABLE myTable
(
id SERIAL,
myGuid VARCHAR DEFAULT uuid_generate_v4(),
anotherColumn VARCHAR
)
型号:
class myTable(models.Model):
id = models.AutoField(primary_key=True)
#How to represent myGuid column
anotherColumn = models.CharField(max_length=40)
class Meta:
db_table = "myTable"
我使用Python 2.7.3和1.4.2的Django
这是未经测试的,我可以忽略一些东西,所以我没有把它作为答案。但是我没有看到任何理由,你不能直接在你的数据库客户端创建你的表而不是通过syncdb,然后在你的模型中用'blank = True'声明一个字段,这样你就可以验证,该字段的默认值。 –
@PeterDeGlopper我仍然可以通过'blank = True'访问'myGuid'?换句话说,'blank = True'是否使'myGuid'只读,我可以从数据库中读取myGuid,但是不会将'myGuid'的值写入数据库? –
否,blank = True只允许管理员之类的内容验证模型,而不在myGuid的Python表示中设置值。您仍然可以更改myGuid值。如果你希望它是不可编辑的,但仍然可读,我不会想到一种方法让Django能够普遍地做到这一点 - 也许拒绝在数据库级别更新对Django用户的访问会这样做?您可以通过模型上的自定义“保存”方法对其进行近似处理,但可以通过原始SQL查询进行绕过。 –