Создание поля слагов в базе данных, привязанной к полю имени - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть проект 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 голосов
/ 17 февраля 2011
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)

Это сгенерирует для вас слаг, основанный на имени при сохранении.Он также защищает вас от смены пули при следующем изменении имени, поэтому URL-адреса остаются стабильными и неизменными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...