2011-02-10 88 views
0

我有一個django項目,我試圖在不使用任何遷移工具的情況下更新數據庫表。我給一個模型添加了一個'slug'字段,它只是簡單地引用了它的名字,我打算通過複製另一個已經有一個slug的表中的內容來實現。在與數據庫綁定的數據庫中創建一個slug字段

所以,我在數據庫中的現有表「健身房」如下

+----------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+----------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| gym_name | varchar(50) | NO | UNI | NULL |    | 
| gym_slug | varchar(50) | NO | MUL | NULL |    | 
| created | datetime  | NO |  | NULL |    | 
| modified | datetime  | NO |  | NULL |    | 
+----------+--------------+------+-----+---------+----------------+ 

,我必須在數據庫中的另一個表「牆」如下:

+-----------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+-------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| wall_name | varchar(50) | NO | UNI | NULL |    | 
| gym_id | int(11)  | NO | MUL | NULL |    | 
| created | datetime | NO |  | NULL |    | 
| modified | datetime | NO |  | NULL |    | 
+-----------+-------------+------+-----+---------+----------------+ 

這將得到我的一部分的方式有:

ALTER TABLE wall ADD COLUMN wall_slug varchar(50); 

但我不知道如何找出哪裏的外鍵第一個表是參考的,因此我應該指出新的一個。

最終目標:將wall_slug字段綁定到唯一的wall_name字段。希望這是有道理的。

+0

我不明白你的意思是什麼: 「但我不確定如何確定第一個表中的外鍵引用的位置,以及我應該在哪裏指向新的表。你正在添加一個文本字段,而不是外鍵,對嗎?另外,你的意思是「ALTER TABLE牆添加列wall_slug varchar(50)」? – Rob 2011-02-11 03:13:06

+0

關於後面的問題,是的 - 我只是編輯它以反映適當的查詢。至於你的第一個問題,我可能會誤解桌子給我看的東西,但它看起來像gym.gym_name和gym.gym_slug不僅僅在模型層面上相關,而且在數據庫層面也是如此。我假設我必須按照某種方式將wall.wall_name關聯到wall.wall_slug,但我不知道如何執行此操作。 – IanWhalen 2011-02-11 22:41:58

回答

0
from django.template.defaultfilters import slugify 

class Wall(Model): 
    name = CharField(max_length=60) 
    slug = CharField(max_length=60, unique=True) 
    ... 

    def save(self, *args, **kwargs): 
     if self.slug == '': 
      self.slug = slugify(self.name) 
     super(Wall, self).save(*args, **kwargs) 

這會在保存時爲您生成一個基於名稱的slu g。它還可以保護您在下次更改名稱時更改slug,因此URL保持穩定並保持不變。

相關問題