[转]Django实战(11):修改Model类
来源:互联网 发布:淘宝衣服评价语20字 编辑:程序博客网 时间:2024/06/05 22:31
我们已经实现了卖方的产品维护界面,根据最初的需求,还要为买方实现一个目录页:买方通过这个界面浏览产品并可以加入购物车。通过进一步需求调研,了解到产品有一个“上架时间”,在这个时间之后的产品才能被买方看到。并且买方应该先看到最新的产品。
我们注意到,这个“新需求”需要对Product进行调整,增加一个日期属性date_available来保存“上架时间”。如同开发新功能一样,在修改的时候也应该从model开始。
为Model类增加一个属性很容易:
- class Product(models.Model):
- title = models.CharField(max_length=100,unique=True)
- description = models.TextField()
- image_url = models.URLField(max_length=200)
- price = models.DecimalField(max_digits=8,decimal_places=2)
- date_available = models.DateField()
问题在于,model类的改变需要对数据库表也进行同样的修改。你可能想到前面介绍过的python manage.py syncdb, 但是很遗憾这个命令现在不起作用了。因为syncdb仅仅创建数据库里还没有的表,它 并不 对你数据模型的修改进行同步,也不处理数据模型的删除。 如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改。 当然,在开发环境你可以drop相应的表,然后运行syncdb重新创建。但是这样做对于发布环境没有任何帮助,所以我们最好这样做:
1. 使用sqlall查看模型新的 CREATE TABLE 语句。 查看新创建的字段:
$ python manage.py sqlall depotapp
BEGIN;
CREATE TABLE "depotapp_product" (
"id" integer NOT NULL PRIMARY KEY,
"title" varchar(100) NOT NULL UNIQUE,
"description" text NOT NULL,
"image_url" varchar(200) NOT NULL,
"price" decimal NOT NULL,
"date_available" date NOT NULL
)
;
COMMIT;
2. 使用数据库命令行工具,或客户端工具,或者django提供的dbshell工具增加字段:
$ python manage.py dbshell
sqlite> begin;
sqlite> alter table depotapp_product add column date_available date not null default 0;
sqlite> commit;
3. 验证数据库:
$ python manage.py shell
>>> from depot.depotapp.models import Product
>>> Product.objects.all()
如果没有异常发生,则可以在发布环境进行上述修改。
以上是在模型中增加一个属性的步骤。其他对模型的修改可能还有:
删除字段——drop column
删除模型——drop table
删除多对多关联——drop table (自动生成的关联表)
也需要参考上述的步骤进行。
本人已在github上用Jekyll建立了新的博客:http://thinkinside.tk/,本站文章会陆续迁移过去
访问http://www.cnblogs.com/holbrook/archive/2012/02/19/2358688.html查看原文
- [转]Django实战(11):修改Model类
- Django 修改model后同步修改数据库
- Django model类
- django在Model中修改表名
- [Django实战] 第5篇 - 用户认证(修改密码)
- django学习8 model类
- Django model 参考(一)
- Django model
- Django model
- Django model
- django model
- django--Model
- Django-Model
- Django Model
- django 修改model field后台默认的显示方式
- django中使用south同步对model的修改
- [转]Django model字段类型详解
- Django:model类的objects属性
- android简单的竖线流程图介绍
- ListOrderedMap与Map的区别
- 【转载】 如何在Eclipse下查看 JDK 源代码
- java教程、java学习:Java数据缓存实现的核心机制
- ElasticSearch Index API
- [转]Django实战(11):修改Model类
- kafka系列4-什么是kafka
- 基于蓝牙BLE的室内定位技术研究与实现
- 实验帖
- js文字循环滚动
- USACO5.3 IDDFS_强连通_二维树状数组_斐蜀定理_矩形切割
- 文件上传form属性:enctype=multipart/form-data
- 每天laravel-20160818| Container -21
- 如何安装CRX格式?Chrome插件离线安装,CRX格式安装方法