【发布时间】:2013-06-26 05:13:25
【问题描述】:
如何在 django 模型中表示具有默认值(在 SQL 中指定)的列?
表:
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 和 Django 1.4.2
【问题讨论】:
-
这是未经测试的,我可能会忽略一些东西,所以我没有把它作为答案。但是我看不出有任何理由不能直接在数据库客户端中创建表,而不是通过syncdb,然后在模型上声明一个带有
blank=True的字段,这样您就可以在不需要非默认值的情况下进行验证领域。 -
@PeterDeGlopper 我还能用
blank=True访问myGuid吗?换句话说,blank=True是否使myGuid只读,我可以从数据库中读取myGuid,但永远不会将myGuid的值写入数据库? -
不,blank=True 只允许管理员等验证模型,而无需在 Python 表示中为 myGuid 设置值。您仍然可以更改 myGuid 值。如果您希望它不可编辑但仍然可读,我想不出一种让 Django 普遍做到这一点的方法——也许拒绝 Django 用户在数据库级别的更新访问会这样做?您可以通过模型上的自定义
save方法来近似它,但这可以通过原始 SQL 查询绕过。 -
你不能用 Django 真正做到这一点,或者更确切地说不能用
./manage.py syncdb。您最好在class Meta中设置managed=False并手动创建表。
标签: python django postgresql-9.1