Django實戰(11):修改Model類


我們已經實現了賣方的產品維護界面,根據最初的需求,還要為買方實現一個目錄頁:買方通過這個界面瀏覽產品並可以加入購物車。通過進一步需求調研,了解到產品有一個“上架時間”,在這個時間之后的產品才能被買方看到。並且買方應該先看到最新的產品。

我們注意到,這個“新需求”需要對Product進行調整,增加一個日期屬性date_available來保存“上架時間”。如同開發新功能一樣,在修改的時候也應該從model開始。

為Model類增加一個屬性很容易:

 

[python] view plain copy
  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 (自動生成的關聯表)

也需要參考上述的步驟進行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM