zoukankan      html  css  js  c++  java
  • Django实战(11):修改Model类

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

    我们注意到,这个“新需求”需要对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 (自动生成的关联表)

    也需要参考上述的步骤进行。

  • 相关阅读:
    docker工具链概述
    Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (二)
    Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一)
    阿贝云免费虚拟主机使用体验
    Topshelf 秒建 Windows 服务
    一次兼职项目开发的经历
    修改了my.ini没有效果,MySql的字符集还是没有变成utf8——mysql中文乱码
    【转载】Fiddler工具使用介绍(一)
    C#中$的用法
    系统开发常用模块
  • 原文地址:https://www.cnblogs.com/wuxl360/p/5787848.html
Copyright © 2011-2022 走看看