[转]Django实战(11):修改Model类

转载 2016年05月31日 09:20:32

我们已经实现了卖方的产品维护界面,根据最初的需求,还要为买方实现一个目录页:买方通过这个界面浏览产品并可以加入购物车。通过进一步需求调研,了解到产品有一个“上架时间”,在这个时间之后的产品才能被买方看到。并且买方应该先看到最新的产品。

我们注意到,这个“新需求”需要对Product进行调整,增加一个日期属性date_available来保存“上架时间”。如同开发新功能一样,在修改的时候也应该从model开始。

为Model类增加一个属性很容易:

 

  1. class Product(models.Model): 
  2. title = models.CharField(max_length=100,unique=True
  3. description     = models.TextField() 
  4. image_url = models.URLField(max_length=200
  5. price = models.DecimalField(max_digits=8,decimal_places=2
  6. 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查看原文

相关文章推荐

R 语言实战[中文完整版]

  • 2015-09-06 10:41
  • 22.52MB
  • 下载

[转]移植linux-2.6.36内核后的ts及lcd驱动参数修改

本文转自:http://blogold.chinaunix.net/u4/120285/showart_2396199.html  移植linux-2.6.36内核及修改touchscreen及lc...

[转]Mat类的理解

文章链接:豆瓣 cv::Mat depth/dims/channels/step/data/elemSize The class Mat represents an n-dimensional de...

cocos2d-x 3.1.1 学习笔记[11] http请求 + json解析

xu y

关于web性能的思考与分享[11]-Http协议理解

概述关于http(中文名:超文本传输协议),你无须明白那冗长的理论解释,只需要明白3点: 1)HTTP请求方式:get\post\head…; 2)Http传输类型:均由Content-...

[C++之AOP]实战Aspect C++之检查内存泄漏

[C++之AOP]实战Aspect C++之检查内存泄漏前面简单介绍了Aspect C++,相信没人看出它有什么特别强大的地方。这次特别挑了一个合适的例子,检查内存泄漏。首先看一个普通的程序:1、te...

[译文]性能调优--永远超乎想象 (原文最终修订于 2006-08-28 晚上11:48:38)

多年以前,我在开发一个C++的应用程序。我的同伴Jim Newkirk(当时的)过来告诉说,我们的一个公用函数运行得非常的缓慢。这个函数是用来转换二进制的树结构数据为普通文本,并存储到文件中的。(这是...

[机器学习实战]k-近邻算法

- 用到的一些重要的python函数operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)