在数据库中创建与名称字段关联的slug字段

时间:2011-02-10 17:56:36

标签: python mysql django django-models foreign-keys

我有一个django项目,我正在尝试更新数据库表而不使用任何迁移工具。我正在为一个模型添加一个'slug'字段,该模型只是引用它的名字,我打算通过复制已经有一个slug的另一个表中的内容来实现这一目的。

所以,我在数据库中有一个现有的表'gym',如下所示

+----------+--------------+------+-----+---------+----------------+
| 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    |                |
+----------+--------------+------+-----+---------+----------------+

我在数据库中有另一个表'wall',如下所示:

+-----------+-------------+------+-----+---------+----------------+
| 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字段。希望这是有道理的。

1 个答案:

答案 0 :(得分: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 ..它还可以防止您在下次更改名称时更改slug,因此URL保持稳定且不变。