2011-02-10 135 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保持稳定并保持不变。