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

0 投票
1 回答
1297 浏览
提问于 2025-04-16 11:35

我有一个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
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)

这段代码会根据你输入的名字生成一个“短链接”。这样做的好处是,当你下次修改名字时,它不会自动改变这个短链接,这样网址就能保持稳定,不会变动。

撰写回答