在数据库中创建与名称字段关联的别名字段
我有一个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)
这段代码会根据你输入的名字生成一个“短链接”。这样做的好处是,当你下次修改名字时,它不会自动改变这个短链接,这样网址就能保持稳定,不会变动。