(转)Django ====> 实战学习篇七 Model类的修改

  • depot这个应用,根据最初的需求我们在model中写了多个字段,买方需要一个目录页面,可以浏览货物,这时候我们需要一个上架时间,在这个时间之后的产品买方才能看到,而且买方看到的物品一定是最新的。
  • 这个时候我们注意到,为了这个新的需求我们需要对model类进行调整,增加一个新的属性字段date_available来满足需求,像开发新的功能一样,我们需要从修改model开始。

      修改model很容易,我们只是需要在models.py中加入:

class Product(models.Model):
        ....

        date_available = DateField()
        ....
  • 但要知道我们只是对model模型进行了修改,还需要对数据库表进行修改,这个时候python manage.py syncdb 并不能起作用,syncdb只能创建还没有建立的表,它并不对数据模型的修改进行同步,也不处理数据模型的删除;有的时候我们需要增加,修改,删除一个数据模型,需要手动的在数据库里进行相应的修改,在开发环境里可以drop掉相应的表,然后syncdb。但是对于发布环境却没有作用,我们最好这样做:
    用下列命令产见看新creat的table中的内容:
    
    python manage.py sqlall depotapp
    BEGIN;
    CREATE TABLE "depotapp_product" (
        "id" integer NOT NULL PRIMARY KEY,
        "title" varchar(30) NOT NULL UNIQUE,
        "description" text NOT NULL,
        "image_url" varchar(200) NOT NULL,
        "price" decimal NOT NULL,
        "date_available" date NOT NULL
    )
    ;
    COMMIT;
    
    使用django提供dbshell工具进行增加字段:
    python manage.py dbshell
    ...
    sqlite>begin;
    sqlite>alter table depotapp_product add column date_available date not null default 0;
    sqlite>commit;
  • 验证数据库:
    python manage.py shell
    ...
    >>from depotapp.models import Product
    >>Product.objects.all()

    没有发生异常的话,就可以了。

     

    以上是增加属性的步骤,还有其他的选项:

    drop table  -----删除模型
    
    drop column ----删除字段
    
    drop table ----删除多对对关联(自动生成的关联)???

    直接按照上边步骤进行修改就行了。

posted @ 2012-09-26 10:41  事件轮询,回不到过去  阅读(351)  评论(0编辑  收藏  举报