[转]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查看原文

Django 如何将model对象转json数据

#原始方法:把所有属性拿出来一个个的放进dict中,当然可以参考方法2,提取对象所有属性与值 #参考方法1: 简单版本def convert_to_dicts(objs):     '''把对象列表转...
  • xushuai110
  • xushuai110
  • 2015年12月23日 10:03
  • 4775

django 将model转换成想要都json格式

model: class SysRole(models.Model): id = models.CharField(db_column='ID', primary_key=True, max_...
  • wjy397
  • wjy397
  • 2015年11月02日 20:18
  • 1846

Django中models数据模型重命名

问题:       今天的工作内容是使用的django的models.py实现定义好的数据表。这本身是一个非常简单的工作,可以从models.py里面定义表结构,django框架就会自动实现ORM把...
  • hengrjgc
  • hengrjgc
  • 2015年05月15日 11:18
  • 1770

Django笔记教程:三、Model进阶

Model 进阶学习简介Django经常被用于一些创业团队,乃是因为其非常适合敏捷开发,开发效率非常之高。Model 作为Django重要组成部分也是亮点之一,着实需要我们花时间好好梳理一遍。 ...
  • alvine008
  • alvine008
  • 2015年11月24日 16:54
  • 5625

Django model更改继承的类时需要的默认值

Shop原来是继承models.Model的,现在继承BaseModel class BaseModel(models.Model): """ 基类 """ is_v...
  • djshichaoren
  • djshichaoren
  • 2017年11月02日 17:50
  • 445

如何动态设置django的model field的默认值

问题背景django的model field需要动态设置默认值,具体案例如下: 原始代码如下,model是Application,其中字段ignore_fort的默认值设置为Falseclass A...
  • lilingyu520
  • lilingyu520
  • 2015年09月30日 09:53
  • 3591

django学习记录-模型继承

官方文档 django中的继承有三类; 1.抽象继承 2.多表继承 3.proxy model(代理模型) 第1种情况表示你的父类仅仅是包含了多个子类的相同的字段,是为了重用,不会建表,我们只...
  • A_9884108
  • A_9884108
  • 2014年01月28日 10:05
  • 3008

根据Django Model动态生成sql的方法

转自:http://blog.csdn.net/wenxuansoft/article/details/8039011 当定义好Django Model后,一般可以在初始化调用Syncdb方法...
  • shuifa2008
  • shuifa2008
  • 2015年05月09日 11:29
  • 3089

django1.9 实现模型变更三步走

django与数据库同步,Django_book_2中提到python manage.py syncdb即可。本人下载django版本为1.9.7: tust@tust:~$ python Py...
  • tustzhoujian
  • tustzhoujian
  • 2016年07月21日 17:05
  • 1775

Django项目中model的数据处理以及页面交互

Django中Models是什么: 通常,一个Model对应一张数据表, Django中Models以类的形式表现, 它包含一些基本字段以及数据的一些行为 ORM: 对象关系映射(O...
  • qixinbruce
  • qixinbruce
  • 2017年06月22日 22:35
  • 1033
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转]Django实战(11):修改Model类
举报原因:
原因补充:

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