我有一个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字段。希望这是有道理的。
答案 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保持稳定且不变。